数据记录代码在 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)?
等等
我正在尝试 运行 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)?
等等