数据记录代码在 DrRacket 中不起作用

Datalog code not working in DrRacket

我正在尝试 运行 DrRacket 中的这个序言代码:http://www.anselm.edu/homepage/mmalita/culpro/graf1.html

#lang datalog

arc(a,b).
arc(b,c).
arc(a,c).
arc(a,d).
arc(b,e).
arc(e,f).
arc(b,f).
arc(f,g).   

pathall(X,X,[]).
pathall(X,Y,[X,Z|L]):- arc(X,Z),pathall(Z,Y,L).       % error on this line; 

pathall(a,g)?

但是,它给出了以下错误:

read: expected a `]' to close `['

我怀疑'|'符号未被读取为列表的头尾分隔符。此外,[] 也给出错误(如果后续行被删除):

#%app: missing procedure expression;
 probably originally (), which is an illegal empty application in: (#%app)

如何更正这些,以便代码工作并搜索 a 和 g 之间的路径?

DrRacket 中的 Datalog 模块不是 Prolog 的实现,您使用的语法是不允许的(请参阅 manual 以了解允许的语法)。

具体来说不能是列表([])这样的数据结构。要 运行 一个像上面那样的程序,你需要一个具有数据结构的 Prolog 解释器。

你可以做的是定义一个谓词 path,就像你链接的例子:

path(X,Y):- arc(X,Y).
path(X,Y):- arc(X,Z),path(Z,Y).

例如,询问路径是否存在,如:

path(a,g)?

或者用

打印到某个节点的所有路径
path(X,g)?

等等