这是一个常见的错误。即有一个假设,即事实可以通过键入直接输入到顶层。
解释器发出错误,因为他理解作为查询输入的内容并且查询中的谓词尚未定义。
但最终用户有多种选择:
1) 第一个选项使用 assertz/1 或 asserta/1:
顶层用于执行目标。您需要一个指示解释器执行断言的目标。使用 asserta/1 或 assertz/1:
顶层:
?- assertz(likes(foo, bar)).
请注意,已经用作静态谓词的谓词,即已通过方法 2) 或 3) 添加的谓词不能再被断言。然后使用 dynamic/1 指令。
不支持内置的 assert/1,因为它不是 ISO 核心标准的一部分,通常对 assertz/1 是多余的。
2)第二种选择使用文件并查阅它:
将事实和规则放入文件中。并通过内建的咨询/1 进行咨询。
文件 baz.p:
likes(foo, bar).
顶层:
?- consult('baz.p').
您也可以使用 ensure_loaded/1 或 use_module/1 来代替咨询/1。
3)第三个选项直接从控制台咨询:
直接在顶层输入事实和规则。通过文件结尾的击键完成事实和规则的输入。
顶层:
?- [user].
likes(foo, bar).
^D
再见