我怀疑 λProlog 的主要实现 teyjus 可能有点废弃软件,但 λProlog 是一个令人着迷的 Prolog,它应该让你使用高阶逻辑、假设推理和其他东西,这就是为什么我试图用它。
文件“example.sig”:
sig example.
kind person, language type.
type hans person.
type german, french, italian language.
type grade person -> o.
type take person -> language -> o.
文件“example.mod”:
module example.
(grade P) :- (take P german), (take P french).
(grade P) :- (take P german), (take P italian).
take hans french.
然而,当我编译并加载它时,虽然它看起来有效,但假设的推理查询被拒绝:
[example] ?- take X Y.
The answer substitution:
Y = french
X = hans
More solutions (y/n)? y
no (more) solutions
[example] ?- grade X.
no (more) solutions
[example] ?- (take hans german) => (grade hans).
(1,19) : Error : Symbol => is not permitted within terms
我期待最后得到一个“是”。我究竟做错了什么?
当前版本的 Teyjus 不允许将查询中的含义直接输入到顶层。我和戈帕兰·纳达图尔写的书(使用高阶逻辑编程 https://sites.google.com/site/proghol/)在附录中提到了这个问题和解决方法(见下面的摘录)。
A.4.2 与本书中假设的语言的偏差(第 287 页)
[...]
Teyjus 不允许在顶级目标中使用暗示。当编译模型也扩展到这些目标时,这个特性将来可能会改变,但就目前而言,这意味着一些示例(例如第 3.2 节中的示例)不能直接使用该系统运行。请注意,仅在顶级目标中不允许使用暗示:它们可以在程序子句正文中出现的目标中自由使用。因此,可以通过首先构建合适的程序子句然后使用它提出所需的查询来克服此限制。例如,不要提出查询
?- p a => p b => p X.
可以创建该子句
test X :- p a => p b => p X.
然后使用查询
?- test X.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)