2017-09-13 90 views
0

我想將this Prolog code移植到Racket中的Datalog,使用this page底部的示例。Datalog代碼在Racket中不起作用

#lang datalog 

edge(a, b). edge(b, c). edge(c, d). edge(d, a). 
path(X, Y) :- edge(X, Y). 
path(X, Y) :- edge(X, Z), path(Z, Y). 
path(X, Y)? 

pathall(X,X,[]). 
pathall(X,Y,[X,Z|L]):- arc(X,Z),pathall(Z,Y,L). 
pathall(a, d)? 

但它給在代碼最後一行在[X,Z|L]這個錯誤:

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

如何代表數據記錄列表?謝謝你的幫助。

回答

2

Datalog是Prolog的語法子集

特別地,在數據記錄中支持的複合術語如列表而不是

+0

因此,對於這樣的任務最好使用Prolog iteself。任何其他採用Prolog代碼的方案?還是Haskell? – rnso

+2

在這些問題的背景下,我個人的建議是直接使用Prolog:它是一種成熟的編程語言,也有內置的數據庫。爲什麼不直接跳到真實的東西? – mat