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

时间:2016-08-30 08:26:06

标签: prolog scheme racket datalog

我正在尝试在DrRacket中运行此prolog代码: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之间的路径?

1 个答案:

答案 0 :(得分:2)

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)?