Prolog-使用PIE时要求用户输入时出现“未知子句”错误消息(Prolog接口引擎)

时间:2018-11-23 12:49:33

标签: prolog

我正在为一个简单的程序编写代码,该程序可以输出用户输入的任何短语。到目前为止,这是我的代码:

input():-
read(X),
nl,
write(X).

以下是输出:

input().
input().
Unknown clause found read(X$0)
Execution terminated
No solutions

这是我想要的输出:

input().
input().
hello
hello

1 个答案:

答案 0 :(得分:0)

注意:OP在评论中指出,这最初是使用PIE (Prolog Interface Engine)

完成的

您的问题是您使用的是read/1,它需要一个Prolog术语。 Prolog术语不是可以采用任何形式的字符串,Prolog术语以句点(.)结尾。因此,在您的示例中,input().之所以有效是因为它以句点结尾,hello却不起作用是因为它没有以句点结尾。

使用查询

?- input().
|: input().

并输入input().即可

input()
true.


?- input().
|: hello
|: .

输入hello并不能立即按第二个提示|:的指示进行,但随后输入.即可完成Prolog术语并可以使用。

hello
true.

-

这是您的代码的演示,在SWISH上运行时稍作修改。

enter image description here


当我在笔记本电脑上安装SWI-Prolog来运行代码时,它以input()作为谓词。当我用SWISH尝试相同的操作时,它抱怨了,但是将谓词从input()更改为input就解决了这个问题。


现在知道您没有使用SWI-Prolog之类的通用Prolog,并看到了错误消息

Unknown clause found read(X$0)

告诉我PIE没有read/1,我快速检查了一些PIE教程,找不到read/1的任何用法。显而易见的结论是PIE不支持read/1,如果您想在学习Prolog时使用read/1,则必须使用某些功能,例如SWI-Prolog,SWISH,GNU Prolog