在Prolog中,我可以调出REPL来交互式地测试Prolog代码(交互模式),我还可以将代码写在要从命令行执行的文件中(批处理模式) .
在交互模式下,我使用 setof
函数来获取所有结果 .
?- [likes].
?- setof(X, likes(sam, X), L).
L = [chips, chop_suey, chow_mein, dahl, kurma, pizza, spaghetti, sweet_and_sour, tandoori].
我可以继续询问 ?- likes(sam, X)
的结果,我也可以使用 once
函数只得到一个结果 .
?- once(likes(sam,X)).
X = dahl.
因为我可以使用相同的setof函数来获得以批处理模式打印的结果 .
:- initialization main.
main :-
[likes],
setof(X, likes(sam, X), L),
write(L),
halt.
然后,我怎样才能得到并打印 once(likes(sam,X))
的结果?我试图使用 L2 = once(likes(sam, X)
在 L2
中打印出结果,但是我收到了错误 .
一般来说,如何获得交互模式的结果?例如,如何在批处理模式下打印 ?- likes(sam, dahl)
的结果(真或假值)?
1 回答
如果你想写出
once(likes(sam,X))
的结果:如果要在没有找到
X
的情况下输出false,则:L2 = once(likes(sam, X))
会失败,因为Prolog谓词不是返回值的函数 . 此表达式仅将L2
与术语once(likes(sam, X))
统一起来 .如果要写出地面查询,例如
likes(sam, dahl)
是成功还是失败: