无法在 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/1
或 assertz/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
再见
我正在使用七周内的七种语言 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/1
或 assertz/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/13) 第三个选项直接从控制台查询:
直接在顶层输入事实和规则。通过文件结束键敲击完成事实和规则的输入。
顶级:
?- [user].
likes(foo, bar).
^D
再见