如何在SWI-Prolog中创建事实?

Hop*_*pe7 25 prolog

我只是想创造类似的东西:like(x,y).我已经尝试了很长时间而且真的很沮丧,有人可以告诉我该怎么做??? !!!

小智 44

我假设您正在以交互方式使用swi并尝试输入事实会给您一个错误,如下所示:

1 ?- like(x, y).
ERROR: toplevel: Undefined procedure: like/2 (DWIM could not correct goal)
Run Code Online (Sandbox Code Playgroud)

由于数据库中不存在这一事实.如果是这种情况,请先尝试断言事实:

2 ?- assert(like(x,y)).
true.
Run Code Online (Sandbox Code Playgroud)

然后你可以尝试:

3 ?- like(x, y).
true.
Run Code Online (Sandbox Code Playgroud)

这次查询成功,因为事实存在于数据库中.

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

emacs.
Run Code Online (Sandbox Code Playgroud)

在提示.或者使用您自己的编辑器然后查阅该文件.Swi prolog附带了许多可能有用的图形工具; 请查看手册以获取更多详细信息.

  • @ Hope7,当发布的答案解决您的问题时,请点击复选标记接受它. (2认同)
  • 要让 Prolog 接受谓词而不*断言* 1,请输入“dynamic(like/2)”。然后你会得到“false”而不是*未定义的过程*异常*,直到你*断言*一个*like/2*事实。 (2认同)
  • `assert/1` 是一个常见但非标准的谓词。为了可移植性,请改用 `asserta/1` 或 `assertz/1`。 (2认同)