使用Prolog以批处理模式打印出一个结果

时间:2015-02-02 15:18:57

标签: prolog

在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 个答案:

答案 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')
), ...