Manual/es/compilacion-y-desarrollo-de-modulos

Compilación y desarrollo de módulos

En esta página se describe cómo implementar predicados y programas. Tau Prolog ofrece la posibilidad de compilar un programa Prolog, generando el código JavaScript necesario que puede ser almacenado y cargado como un módulo.

Compilación de programas Prolog

La forma más sencilla de generar un módulo en Tau Prolog es cargar el programa en una sesión, y utilizar el método compile del prototipo pl.type.Session. Este método se encarga de generar y devolver una cadena de caracteres con el código JavaScript necesario, que puede ser directamente copiado y pegado en un fichero .js y cargado en la página.

var session = pl.create();
session.consult(
	"append([], X, X)." +
	"append([H|T], X, [H|S]) :- append(T, X, S)." +
	"member(X, [X|_])." +
	"member(X, [_|Xs]) :- member(X, Xs)."
);
console.log(session.compile()); // '{"append/3": [new pl.type.Rule(new pl.type.Term("append", [new pl.type.Term("[]", []),new pl.type.Var("X"),new pl.type.Var("X")]), null),new pl.type.Rule(new pl.type.Term("append", [new pl.type.Term(".", [new pl.type.Var("H"),new pl.type.Var("T")]),new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("H"),new pl.type.Var("S")])]), new pl.type.Term("append", [new pl.type.Var("T"),new pl.type.Var("X"),new pl.type.Var("S")]))],"member/2": [new pl.type.Rule(new pl.type.Term("member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("X"),new pl.type.Var("_")])]), null),new pl.type.Rule(new pl.type.Term("member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("_"),new pl.type.Var("Xs")])]), new pl.type.Term("member", [new pl.type.Var("X"),new pl.type.Var("Xs")]))]};'

El resultado del método compile nos proporciona un objeto con todas las reglas de la sesión. En este caso el objeto tiene dos propiedades, append/3 y member/2, las cuales contienen la lista de reglas que definen los predicados:

{
	"append/3": [
		new pl.type.Rule(new pl.type.Term("append", [new pl.type.Term("[]", []),new pl.type.Var("X"),new pl.type.Var("X")]), null),
		new pl.type.Rule(new pl.type.Term("append", [new pl.type.Term(".", [new pl.type.Var("H"),new pl.type.Var("T")]),new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("H"),new pl.type.Var("S")])]), new pl.type.Term("append", [new pl.type.Var("T"),new pl.type.Var("X"),new pl.type.Var("S")]))
	],
		
	"member/2": [
		new pl.type.Rule(new pl.type.Term("member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("X"),new pl.type.Var("_")])]), null),
		new pl.type.Rule(new pl.type.Term("member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("_"),new pl.type.Var("Xs")])]), new pl.type.Term("member", [new pl.type.Var("X"),new pl.type.Var("Xs")]))
	]
};

Generación de módulos

Predicados extralógicos

Predicados asíncronos