我正在为一个简单的程序编写代码,该程序可以输出用户输入的任何短语。到目前为止,这是我的代码:
input():-
read(X),
nl,
write(X).
以下是输出:
input().
input().
Unknown clause found read(X$0)
Execution terminated
No solutions
这是我想要的输出:
input().
input().
hello
hello
答案 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上运行时稍作修改。
当我在笔记本电脑上安装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