首页 文章

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

提问于
浏览
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 两个地方谓词(当我想输出一个变量的名称时),但它给出了完全相同的问题 .

我也看过this answer,但首先它不够详细(至少不是像我这样的人),其次,我希望内心深处有更简单的方式来做到这一点 .

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

谢谢 .

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

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

相关问题