Prolog:如何进行重复的打印/输入语句?

Prolog: How do I make repeating print/input statements?

提问人:user22579265 提问时间:9/19/2023 最后编辑:user22579265 更新时间:9/19/2023 访问量:16

问:

我正在使用 SWISH Prolog 创建一个“聊天机器人”,当用户写下“退出”时,它就会停止。到目前为止,这是我的代码:

chat :-
    write('hello I am a chatbot'),
    nl,
    write('when you see "user:" type a word followed by "."'),
    nl,
    write('or type "stop." if you want to stop this nonsense!'),
    read(X);
    reply(X).

reply(X) :-
    X = 'quit' -> print('Goodbye'), !; write(":P"),
    write("did you want "),
    write(X),
    write('?'),
    read(Newx);
    reply(Newx).

当它运行时,我希望它在 print 语句中写入 X 的值,但它输出“你想要 [null 值]吗?”而不是“你想要 [x]吗?([x] 是 x 的输入值)。if 语句总是返回 true(非常确定这与字符串有关,但我不知道如何修复它),当我拿出它来测试其余代码时,它只运行 reply 函数的一个实例。它似乎没有递归,即使语句在那里。

3 个问题:如何传递 X 以显示在 reply(X) 中,如何使 reply 函数实际递归,以及字符串比较如何在 Prolog 中工作?

更新:固定变量和标点符号的大写(当读取语句中应该有“,”时为“;”)。这几乎解决了所有问题,哈哈

递归 IO SWI-Prolog

评论

0赞 gusbro 9/19/2023
变量以大写字母开头。所以你会用 代替 nad 而不是 .XxNewXnewx
0赞 user22579265 9/19/2023
@gusbro更改了它,它现在读取输入,谢谢!

答: 暂无答案