使用 Tau Prolog 为 Javascript 断言谓词
Asserting predicates using Tau Prolog for Javascript
好了,我已经尝试这个问题 2 天多了,但没有任何结果。因此,希望在此问题上提供一些帮助。
问题:尝试使用 Tau Prolog 为 Javascript returns 断言新谓词的结果是错误的。使用 SWI-Prolog 时,完全相同的查询结果为 True。
该程序取自 HTML 页中的 textarea
。一切都只在一台计算机上本地化。
**Prolog rules**
<textarea class="example-textinput example-program" id="program">
breads([parmesan, honeywheat]).
</textarea>
**Javascript in the same HTML page**
<script>
var session = pl.create();
var program = document.getElementById("program").value;
session.consult(program);
session.query(`asserta(chosen_meats(variable_to_be_asserted)).`);
session.answers(show())
function show() {
// Return callback function
return function (answer) {
// Valid answer
console.log(answer);
if (pl.type.is_substitution(answer)) {
// Get the value of the food
var output = answer.lookup("X");
console.log(output);
}
};
}
</script>
我尝试过的:
在 Prolog 中声明动态谓词。
例如
<textarea class="example-textinput example-program" id="program">
breads([parmesan, honeywheat]).
:- dynamic chosen_meats/1.
</textarea>
调用查询时更改为 asserta, assertz and assert
。
结果:在回调函数 show() 中,每当尝试断言时,总是打印出 false。
学期{ref: 6065, id: "throw", args: Array(1), indicator: "throw/1"}
每当 chosen_meats(X).
的查询完成时打印出来。
然而,正常的谓词调用如
session.query("breads(X).");
给出正确的输出
"[parmesan,honeywheat]"
,当使用tostring方法时。
编辑:在线 Tau Prolog 给出了同样的问题
http://tau-prolog.org/
错误已扩展为:
error parsing program: error(syntax_error('. or operator expected'), [line(1), column(11), found(client)])
对于
:-dynamic client/1.
和
assertz(client(x)).
语法错误是问题的线索,您漏掉了一些括号。只有一些 Prolog 方言不需要它们,因此最好始终包含它们以实现可移植性:
:- dynamic(chosen_meats/2).
?- asserta(chosen_meats(chicken, roast)).
true.
我把解决方案放在沙箱里,查询test.
:http://tau-prolog.org/sandbox/ZFgsdJkP
好了,我已经尝试这个问题 2 天多了,但没有任何结果。因此,希望在此问题上提供一些帮助。
问题:尝试使用 Tau Prolog 为 Javascript returns 断言新谓词的结果是错误的。使用 SWI-Prolog 时,完全相同的查询结果为 True。
该程序取自 HTML 页中的 textarea
。一切都只在一台计算机上本地化。
**Prolog rules**
<textarea class="example-textinput example-program" id="program">
breads([parmesan, honeywheat]).
</textarea>
**Javascript in the same HTML page**
<script>
var session = pl.create();
var program = document.getElementById("program").value;
session.consult(program);
session.query(`asserta(chosen_meats(variable_to_be_asserted)).`);
session.answers(show())
function show() {
// Return callback function
return function (answer) {
// Valid answer
console.log(answer);
if (pl.type.is_substitution(answer)) {
// Get the value of the food
var output = answer.lookup("X");
console.log(output);
}
};
}
</script>
我尝试过的: 在 Prolog 中声明动态谓词。 例如
<textarea class="example-textinput example-program" id="program">
breads([parmesan, honeywheat]).
:- dynamic chosen_meats/1.
</textarea>
调用查询时更改为 asserta, assertz and assert
。
结果:在回调函数 show() 中,每当尝试断言时,总是打印出 false。
学期{ref: 6065, id: "throw", args: Array(1), indicator: "throw/1"}
每当 chosen_meats(X).
的查询完成时打印出来。
然而,正常的谓词调用如
session.query("breads(X).");
给出正确的输出
"[parmesan,honeywheat]"
,当使用tostring方法时。
编辑:在线 Tau Prolog 给出了同样的问题 http://tau-prolog.org/ 错误已扩展为:
error parsing program: error(syntax_error('. or operator expected'), [line(1), column(11), found(client)])
对于
:-dynamic client/1.
和
assertz(client(x)).
语法错误是问题的线索,您漏掉了一些括号。只有一些 Prolog 方言不需要它们,因此最好始终包含它们以实现可移植性:
:- dynamic(chosen_meats/2).
?- asserta(chosen_meats(chicken, roast)).
true.
我把解决方案放在沙箱里,查询test.
:http://tau-prolog.org/sandbox/ZFgsdJkP