Quiero usar Tau Prolog junto con JavaScript en un servidor de nodos, siguiendo este tutorial , que funciona bien. Necesito convertir las respuestas en un formato compatible con JavaScript, especialmente listas en matrices u objetos y viceversa.
Cambié el programa Prolog y el objetivo de manera que devuelve una lista
Programa: test(t, [64,65,100,120]).
Objetivo: test(t, X).
que vuelve con
console.log(session.format_answer(answer)); X = [64,65,100,120]también la consola. ¿Cómo puedo obtener solo la lista y asignarla a una variable js?
Lo intenté
answer.lookup("X")que me da
Term { ref: 1258, id: '.', args: [ Num { is_float: false, value: 64 }, Term { ref: 1257, id: '.', args: [Array], indicator: './2' } ], indicator: './2' } Lo cual no es muy cómodo de acceder. La matriz args parece ser la lista. Logré obtener elementos de una sola lista con
console.log(answer.links.X.args[1].args[1].args); para obtener el tercer elemento de la lista.
¿Cuál es la mejor manera de usar respuestas y listas complejas en JavaScript?
Solo para completar, reproduzco esta respuesta aquí.
Puede escribir una función para transformar listas de Prolog en matrices:
function fromList(xs) { var arr = []; while(pl.type.is_term(xs) && xs.indicator === "./2") { arr.push(xs.args[0]); xs = xs.args[1]; } if(pl.type.is_term(xs) && xs.indicator === "[]/0") return arr; return null; }Ejemplo:
var session = pl.create(); session.query("X = [1,2,3]."); session.answer(a => console.log(fromList(a.lookup("X")))); // [ {...}, {...}, {...} ]Tenga en cuenta que los elementos de la matriz siguen siendo objetos Tau Prolog .