在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)
的结果(真或假值)?
答案 0 :(得分:1)
如果您想写出once(likes(sam,X))
的结果:
once(likes(sam, X)),
write(X), ...
如果要在未找到X
时输出false,则:
( once(likes(sam, X))
-> write(X)
; write('Nobody likes sam')
), ...
L2 = once(likes(sam, X))
会失败,因为Prolog谓词不是返回值的函数。此表达式仅将L2
与术语once(likes(sam, X))
统一起来。
如果您想写出地面查询(例如likes(sam, dahl)
)是成功还是失败:
( likes(sam, dahl)
-> write('true')
; write('false')
), ...