Prolog 数据日志代码在DrRacket中不工作

Prolog 数据日志代码在DrRacket中不工作,prolog,scheme,racket,datalog,Prolog,Scheme,Racket,Datalog,我试图在DrRacket中运行以下prolog代码: 但是,它给出了以下错误: read: expected a `]' to close `[' 我怀疑“|”符号没有被解读为列表的头尾分隔符。此外,[]也给出了错误(如果删除了后续行): 如何纠正这些错误,使代码能够工作并搜索a和g之间的路径?DrRacket中的数据日志模块不是Prolog的实现,您使用的语法是不允许的(有关允许的语法,请参阅) 特别是术语不能是列表([])之类的数据结构。要运行上述程序,您需要一个具有数据结构的Prolog

我试图在DrRacket中运行以下prolog代码:

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

read: expected a `]' to close `['
我怀疑“|”符号没有被解读为列表的头尾分隔符。此外,
[]
也给出了错误(如果删除了后续行):


如何纠正这些错误,使代码能够工作并搜索a和g之间的路径?

DrRacket中的数据日志模块不是Prolog的实现,您使用的语法是不允许的(有关允许的语法,请参阅)

特别是术语不能是列表([])之类的数据结构。要运行上述程序,您需要一个具有数据结构的Prolog解释器

例如,您可以定义一个谓词
路径
,如您链接的示例所示:

path(X,Y):- arc(X,Y).
path(X,Y):- arc(X,Z),path(Z,Y).
例如,询问路径是否存在,如:

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

path(X,g)?

等等。

如何将上述代码更改为正常工作的数据日志代码?不能,因为术语不能是列表。DrRacket中的Datalog模块是一个非常简单的模块,与Prolog不同,特别是它不实现数据结构。你能做的只是你链接的例子的第一部分,那就是测试路径是否存在,或者打印路径。有没有一种方法可以在Racket旁边使用合适的Prolog?我想不是真正的Prolog。Prolog是一种基于编程范式的语言,与Scheme/Racket完全不同,要使用适当的Prolog,您需要一个特定的解释器(当然可以用Scheme编写)。例如,如果您想使用Prolog,可以从一个免费且功能强大的实现开始。谢谢。顺便说一句,祝贺你获得10K荣誉。
path(a,g)?
path(X,g)?