【问题标题】:How to create a fact in SWI-Prolog?如何在 SWI-Prolog 中创建一个事实?
【发布时间】:2010-11-03 05:25:33
【问题描述】:

我只想创建类似:like(x,y)。 试了很久,真的很郁闷,谁能告诉我怎么做???!!!

【问题讨论】:

标签: prolog


【解决方案1】:

我假设您正在交互使用 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.

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

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

emacs.

在提示符下。或使用您自己的编辑器,然后查阅文件。斯威序言 带有许多可能有帮助的图形工具;看说明书 了解更多详情。

【讨论】:

  • 要让 Prolog 接受没有 asserting 的谓词,请输入 dynamic(like/2)。然后你会得到false 而不是Undefined procedure 异常*,直到你assert like/2 事实。
  • assert/1 是一个常见但非标准的谓词。为了便于携带,请改用asserta/1assertz/1
【解决方案2】:

您可以创建一个 prolog 文件并使用咨询功能加载它们。

例如,

animals.pl

bigger(elephant, tiger).
bigger(tiger, rabbit).
bigger(rabbit, sparrow).
bigger(sparrow, ant).

您也可以使用 assert 函数在 prolog 终端中定义事实。

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

请参考此link,以获取更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多