7

我想使用 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两个位置谓词(当我想输出变量的名称时),但它给出了完全相同的问题。

我也看到了这个答案,但首先它不够详细(至少对于像我这样的人来说不是),其次,我希望内心深处有一种更简单的方法来做到这一点。

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

谢谢你。

4

1 回答 1

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.
>

你没有得到trueorfalse因为在game你以某种方式退出循环之前目标没有解决。您可以添加对 a quitorbye或任何内容的检查以退出game循环。Ctrl-C 或 Ctrl-D 也可用于中止循环。您可能需要添加一些其他“功能”以使其满足您的需求或喜好。

于 2014-06-24T02:29:17.843 回答