Máquina abstracta de Warren

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En 1983, David H. D. Warren diseñó una máquina abstracta para la ejecución de Prolog que constaba de una arquitectura de memoria y un conjunto de instrucciones. 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.

Propósito

El propósito de compilar el código Prolog al 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 a código nativo suelen ser más fáciles de realizar en la representación de más bajo nivel.

Para escribir programas Prolog eficientes, una comprensión básica de cómo funciona el WAM puede ser ventajoso. Algunos de los conceptos más importantes de WAM 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 falla.

Áreas de memoria

El WAM tiene las siguientes áreas de memoria:

  • El apilación global o Salto, utilizado para almacenar términos compuestos
  • El pila local para marcos ambientales y puntos de elección
  • El sendero para registrar qué variables vinculantes debe ser deshecho en el retroceso

Ejemplo

Aquí hay una parte del código de Prolog:

 chica()sally). chica()Jane.). chico()B) :- + chica()B).

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

 predicar()chica/1): switch_on_term()2,1,falla,falla,falla), etiqueta()1): switch_on_atom([()sally,3),(Jane.,5)] etiqueta()2): try_me_else()4) etiqueta()3): get_atom()sally,0) procede etiqueta()4): trust_me_else_fail etiqueta()5): get_atom()Jane.,0) procede predicar()chico/1): get_variable()x()1),0) put_estructura()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 distintos modos en los que se pueden evocar los predicados: cualquier argumento puede ser una variable, un término básico o un término parcialmente instanciado. El "interruptor" Las instrucciones manejan los diferentes casos.

Contenido relacionado

TNP

NPT puede referirse...

Efecto del segundo sistema

El efecto del segundo sistema o síndrome del segundo sistema es la tendencia de los sistemas pequeños, elegantes y exitosos a ser reemplazados por sistemas...

Señalización de canal separado

Señalización de canal separado es una forma de señalización en la que la totalidad o una parte de uno o más canales en un sistema multicanal se utiliza...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save