如何在SWI Prolog中创建事实?

如何在SWI Prolog中创建事实?,prolog,Prolog,我只想创建这样的东西:像(x,y)。 我已经试了很长时间,真的很沮丧,谁能告诉我怎么做 我假设您正在以交互方式使用swi,并且尝试输入事实时会出现如下错误: 1 ?- like(x, y). ERROR: toplevel: Undefined procedure: like/2 (DWIM could not correct goal) 因为数据库中不存在该事实。 如果是这种情况,请首先尝试断言事实: 2 ?- assert(like(x,y)). true. 然后您可以尝试: 3 ?-

我只想创建这样的东西:
像(x,y)

我已经试了很长时间,真的很沮丧,谁能告诉我怎么做

我假设您正在以交互方式使用swi,并且尝试输入事实时会出现如下错误:

1 ?- like(x, y).
ERROR: toplevel: Undefined procedure: like/2 (DWIM could not correct goal)
因为数据库中不存在该事实。 如果是这种情况,请首先尝试断言事实:

2 ?- assert(like(x,y)).
true.
然后您可以尝试:

3 ?- like(x, y).
true.
这次查询成功,因为事实存在于数据库中

更好的方法可能是将子句写入一个文件&然后将它们写入。 Swi prolog有一个类似emacs的编辑器,您可以通过键入

emacs.
在提示下。或者使用自己的编辑器&然后查阅该文件。Swi序言 附带了很多可能会有所帮助的图形工具;请看手册
有关更多详细信息。

您可以创建一个prolog文件,并使用consult函数加载它们

比如说,

动物。pl

bigger(elephant, tiger).
bigger(tiger, rabbit).
bigger(rabbit, sparrow).
bigger(sparrow, ant).
您还可以使用assert函数在prolog终端中定义事实

1 ?- assert(bigger(elephant, rabbit)).
true.

参考此,获取更多信息。

要让Prolog接受谓词而不断言谓词,请输入
dynamic(like/2)
。然后您将得到
false
而不是未定义的过程异常*,直到您断言一个like/2事实。
assert/1
是一个常见但非标准的谓词。为了便于移植,请改用
asserta/1
assertz/1
。这两个都在这里解释:此外,还发现了关于替代使用的建议。这个问题也反映在这里:参见