Tau Prolog - 如何将序言列表转换为 JavaScript 数组
Tau Prolog - how to convert a prolog list into a JavaScript array
我想在节点服务器上使用 Tau Prolog 和 JavaScript,遵循 this tutorial,效果很好。我需要将答案转换为 JavaScript 兼容格式,尤其是列表到数组或对象,反之亦然。
我以 returns 列表的方式更改了 Prolog 程序和目标
程序:test(t, [64,65,100,120]).
目标:test(t, X).
其中returns与
console.log(session.format_answer(answer));
X = [64,65,100,120]
也是控制台。
如何只获取列表并将其分配给 js 变量?
我试过了
answer.lookup("X")
这给了我
Term {
ref: 1258,
id: '.',
args: [
Num { is_float: false, value: 64 },
Term { ref: 1257, id: '.', args: [Array], indicator: './2' }
],
indicator: './2'
}
访问起来不是很舒服。
args
数组似乎是列表。我设法通过
获得了单个列表元素
console.log(answer.links.X.args[1].args[1].args);
获取第三个列表元素。
在 JavaScript 中使用复杂答案和列表的最佳方式是什么?
为了完整起见,我在这里复制 this answer。
您可以编写一个函数将 Prolog 列表转换为数组:
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;
}
示例:
var session = pl.create();
session.query("X = [1,2,3].");
session.answer(a => console.log(fromList(a.lookup("X")))); // [ {...}, {...}, {...} ]
请注意,数组中的元素仍然是 Tau Prolog objects。
我想在节点服务器上使用 Tau Prolog 和 JavaScript,遵循 this tutorial,效果很好。我需要将答案转换为 JavaScript 兼容格式,尤其是列表到数组或对象,反之亦然。
我以 returns 列表的方式更改了 Prolog 程序和目标
程序:test(t, [64,65,100,120]).
目标:test(t, X).
其中returns与
console.log(session.format_answer(answer));
X = [64,65,100,120]
也是控制台。 如何只获取列表并将其分配给 js 变量?
我试过了
answer.lookup("X")
这给了我
Term {
ref: 1258,
id: '.',
args: [
Num { is_float: false, value: 64 },
Term { ref: 1257, id: '.', args: [Array], indicator: './2' }
],
indicator: './2'
}
访问起来不是很舒服。
args
数组似乎是列表。我设法通过
console.log(answer.links.X.args[1].args[1].args);
获取第三个列表元素。
在 JavaScript 中使用复杂答案和列表的最佳方式是什么?
为了完整起见,我在这里复制 this answer。
您可以编写一个函数将 Prolog 列表转换为数组:
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;
}
示例:
var session = pl.create();
session.query("X = [1,2,3].");
session.answer(a => console.log(fromList(a.lookup("X")))); // [ {...}, {...}, {...} ]
请注意,数组中的元素仍然是 Tau Prolog objects。