我已经成功地将 PHP 与 Prolog 连接起来,并设法查询驻留在文件中的所需知识库,knowledge_base.pl
并设法通过php exec
函数回显结果。
true
我在回显 Prolog 在每次查询执行后返回的/false
值时遇到了问题(请参阅上一个问题),因此我想出了一个难以实施的解决方案。
假设我有一个knowledge_base.pl
包含这些事实和规则的简单文件:
girl(erin).
boy(john).
likes(erin, reading).
likes(john, reading).
hangs_out_with(erin, X) :-
likes(X, reading),
boy(X),
writeln('Someone s got a new friend!!').
假设我想看看erin
是不是一个女孩,如果是,写它是真的,或者写它是假的。我将此添加到我的knowledge_base.pl
文件中:
girl(erin) :-
girl(erin)
-> write('it is true')
; write('it is not true').
当我输入查询时:?- girl(erin).
我得到一个out of local stack
错误。我在网上搜索,发现这是由于无限递归。
有人可以给我一个关于如何写作的提示吗
girl(X) :-
( girl(X)
-> write('it is true')
; write('it is not true')).
在序言中?提前致谢。
作为新用户,我不允许发布图片。
SWI-Prolog 的输出:
1 ?-hangs_out_with(erin,kosta).
false.
2 ?-hangs_out_with(erin,john).
Someone s got a new friend!!
true.
命令提示符的输出:
C:\(directory)>swipl -q -f knowledge_database.pl -g hangs_out_with(erin,kosta),halt.
1 ?-halt. (the halt is inputted by me.)
C:\(directory)>swipl -q -f knowledge_database.pl -g hangs_out_with(erin,john),halt.
Someone s got a new friend!!
第一个查询失败,第二个查询成功。如您所见,查询执行后的序言输出真/假,但是当我在命令提示符下执行相同的查询时,真/假值不会得到回显!