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 de Prolog .

Objetivo

El propósito de compilar el código Prolog en 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 se pueden interpretar de manera más eficiente. Además, las mejoras y compilaciones posteriores del código en 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 conocimientos básicos sobre cómo funciona el WAM. Algunos de los conceptos más importantes del WAM son la indexación del primer argumento y su relación con los puntos de elección, la optimización de las llamadas de cola y la recuperación de memoria en caso de fallo.

Áreas de memoria

El WAM tiene las siguientes áreas de memoria:

Ejemplo

Aquí hay un fragmento de código de Prolog:

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

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

 predicado ( chica / 1 ) :  switch_on_term ( 2 , 1 , fail , fail , fail ),  etiqueta ( 1 ) :  switch_on_atom ([( sally , 3 ),( jane , 5 )])  etiqueta ( 2 ) :  try_me_else ( 4 )  etiqueta ( 3 ) :  get_atom ( sally , 0 )  continuar  etiqueta ( 4 ) :  trust_me_else_fail  etiqueta ( 5 ) :  get_atom ( jane , 0 )  continuar  predicado ( chico / 1 ) :  obtener_variable ( x ( 1 ), 0 )  poner_estructura ( chica / 1 , 0 )  unificar_valor_local ( x ( 1 ))  ejecutar (( \+ ) / 1 )])

Una característica importante de este código es su capacidad para manejar los distintos 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 "switch" manejan los diferentes casos.

Referencias

  1. ^ David HD Warren (octubre de 1983). Un conjunto de instrucciones Prolog abstracto (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}}: CS1 maint: 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 .