无法在 Jekejeke Prolog 中创建事实

Unable to create Fact in Jekejeke Prolog

我正在使用七周内的七种语言 Prolog 教程并尝试 运行 使用 Android Jekejeke Runtime 通过一些示例。 例如,如果我添加

likes(wallace, grommit).

从教程中,我明白了。

Error: Undefined, private or package local predicate likes/2

我尝试使用断言,如 How to create a fact in SWI-Prolog? 中所述,但它说 assert 是未定义的,而不是 likes。

大概我遗漏了一些关于 运行 时间如何运作的基本知识,或者它的 prolog.it 方言。

assert/1 不是标准谓词,尽管有几个实现提供了它。 Jekejeke Prolog 似乎并非如此。请改用 asserta/1assertz/1 标准谓词。第一个声明一个子句作为谓词的第一个。后者断言一个子句作为谓词的最后一个。

这是一个常见错误。即有一定的假设 可以通过键入直接在顶层输入事实。

解释器发出错误,因为他理解作为查询输入的内容并且查询中的谓词尚未定义。

但最终用户有多种选择:

1) 第一个选项使用 assertz/1 或 asserta/1:
顶层是执行目标。您需要一个指示解释器执行断言的目标。使用 asserta/1 或 assertz/1:

顶级:

?- assertz(likes(foo, bar)).

请注意,已经用作静态谓词的谓词,即已通过方法 2) 或 3) 添加的谓词不能再断言。然后使用 dynamic/1 指令。

不支持内置的 assert/1,因为它不是 ISO 核心标准的一部分,通常对 assertz/1 来说是冗余的。

2) 第二个选项使用文件并查阅它:
将事实和规则放入文件中。并通过 consult/1 内置查询。

文件baz.p:

likes(foo, bar).

顶级:

?- consult('baz.p').

您也可以使用 ensure_loaded/1 或 use_module/1.

而不是 consult/1

3) 第三个选项直接从控制台查询:
直接在顶层输入事实和规则。通过文件结束键敲击完成事实和规则的输入。

顶级:

?- [user].
likes(foo, bar).
^D

再见