stringtranslate.com

Máquina abstracta de Warren

En 1983, David HD Warren diseñó una máquina abstracta para la ejecución de Prolog que constaba de una arquitectura de memoria y un conjunto de instrucciones . [1] [2] [3] Este diseño se conoció como Warren Abstract Machine (WAM) y se ha convertido en el objetivo estándar de facto para los compiladores Prolog .

Objetivo

El propósito de compilar el código Prolog en el código WAM de nivel más bajo es hacer que la interpretación posterior del programa Prolog sea más eficiente. El código Prolog es razonablemente fácil de traducir a instrucciones WAM, que pueden interpretarse de manera más eficiente. Además, las mejoras de código posteriores y las compilaciones de código nativo suelen ser más fáciles de realizar en la representación de nivel más bajo.

Para escribir programas Prolog eficientes, puede resultar ventajoso tener un conocimiento básico de cómo funciona WAM. Algunos de los conceptos de WAM más importantes son la indexación del primer argumento y su relación con los puntos de elección, la optimización de llamadas finales y la recuperación de memoria en caso de error.

Áreas de memoria

El WAM tiene las siguientes áreas de memoria:

Ejemplo

Aquí hay un fragmento de código Prolog:

 niña ( sally ).  niña ( jane ).  chico ( B )  :-  \+  chica ( B ).

Un compilador Prolog basado en WAM compilará esto en instrucciones WAM similares a las siguientes:

 predicado ( chica / 1 ) :  switch_on_term ( 2 , 1 , falla , falla , falla ),  etiqueta ( 1 ) :  switch_on_atom ([( salida , 3 ), ( jane , 5 )])  etiqueta ( 2 ) :  try_me_else ( 4 )  etiqueta ( 3 ) :  get_atom ( sally , 0 )  continuar  etiqueta ( 4 ) :  confiar en mí_else_fail  etiqueta ( 5 ) :  get_atom ( jane , 0 )  continuar  predicado ( chico / 1 ) :  get_variable ( x ( 1 ), 0 )  put_structure ( chica / 1 , 0 )  unify_local_value ( x ( 1 ))  ejecutar (( \+ ) / 1 )])

Una característica importante de este código es su capacidad para hacer frente a los diversos modos en que se pueden evocar los predicados: cualquier argumento puede ser una variable, un término fundamental o un término parcialmente instanciado. Las instrucciones de "cambio" manejan los diferentes casos.

Referencias

  1. ^ David HD Warren (octubre de 1983). Un conjunto de instrucciones abstractas de Prolog (PDF) . Menlo Park, CA, EE.UU.: Centro de Inteligencia Artificial de SRI International . Archivado (PDF) desde el original el 19 de junio de 2022.
  2. ^ Hassan Aït-Kaci (18 de febrero de 1999). La máquina abstracta de Warren: una reconstrucción tutorial (PDF) . Archivado desde el original el 13 de febrero de 2003.{{cite book}}: Mantenimiento CS1: URL no apta ( enlace )
  3. ^ Hassan Aït-Kaci. "La máquina abstracta de Warren: una reconstrucción tutorial; el libro, erratas y diapositivas". Archivado desde el original el 19 de enero de 2022 . Consultado el 7 de marzo de 2011 .