如何在Prolog中关闭“true”和“false”输出?

时间:2014-06-23 14:03:18

标签: prolog swi-prolog prolog-toplevel

我想用Prolog写一个基于文本的小型冒险游戏(这可能是一个愚蠢的想法,但我不在这里讨论)。

唯一的问题是,如果没有“true”和“false”值,我无法在屏幕上打印文本。

例如,如果我尝试这样的话:

take(desk) :- write('This thing is way too heavy for me to carry!').

其中take是一个地方谓词,desk是我得到的一个名称:

?- take(desk).
   This thing is way too heavy for me to carry!
   true.

如何摆脱这种“真实”或“错误”的输出?

只是提到我还尝试使用format/1一个地方谓词进行简单的文本输出,还尝试使用format/2两个地方谓词(当我想输出一个变量的名称时)但它给出了完全相同的问题。

我也见过this answer,但首先它不够详细(至少不适合像我这样的人),其次,我希望内心深处有更简单的方式来做。

最后,我正在使用SWI-Prolog。

谢谢。

1 个答案:

答案 0 :(得分:10)

一种简单的方法是创建自己的一个小REPL(读取,评估,打印循环)。像这样:

game :-
    repeat,
    write('> '),
    read(X),
    call(X),
    fail.

这只会提示并执行您在提示符下输入的内容。结合您的take事实(以及我添加的另一个例子):

take(desk) :- write('This thing is way too heavy for me to carry!'), nl.
take(chair) :- write('This is easier to carry.'), nl.

你会得到:

?- game.
> take(desk).
This thing is way too heavy for me to carry!
> take(chair).
This is easier to carry.
>

您没有获得truefalse,因为game目标在您以某种方式退出循环之前无法解决。您可以添加quitbye或其他任何内容的检查以退出game循环。也可以使用Ctrl-C或Ctrl-D来中止循环。您可能需要添加一些其他“功能”,以使其适合您的需求或喜欢。