示例代码中的Prolog错误

示例代码中的Prolog错误,prolog,Prolog,我读了一本关于prolog的书,试图粘贴他们的示例代码,看看它是如何工作的,我发现了一些错误。这个代码有什么问题 path(X,Y)← path(X,Y,[X]). path(X,X,Visited). path(X,Z,Visited)← edge(X,Y), not member(Y,Visited), path(Y,Z,[Y|Visited]). member(X,[X|Y]). member(X,[Y|Z])←

我读了一本关于prolog的书,试图粘贴他们的示例代码,看看它是如何工作的,我发现了一些错误。这个代码有什么问题

   path(X,Y)← 
    path(X,Y,[X]).


  path(X,X,Visited).
  path(X,Z,Visited)←
     edge(X,Y),
     not member(Y,Visited),
     path(Y,Z,[Y|Visited]). 

 member(X,[X|Y]). 
 member(X,[Y|Z])← 
    member(X,Z)

在SWI Prolog中,以下声明使代码可编译

:- op(1200, xfx, ←).
:- op(900, fy, not).

:- multifile term_expansion/2.
term_expansion((H←B), (H:-B)).
term_expansion((not B), (\+ B)).

path(X,Y)←
    path(X,Y,[X]).

path(X,X,Visited).
path(X,Z,Visited)←
     edge(X,Y),
     not member(Y,Visited),
     path(Y,Z,[Y|Visited]). 

member(X,[X|Y]). 
member(X,[Y|Z])← 
    member(X,Z).

有一些关于单身的警告,你错过了最后一点。。。我提供了它

您使用的是什么prolog解释器?你犯了什么错误?我只是不断地犯错误,这有点难以帮助。您输入的
?Prolog解释器不使用这个。那些是书中使用的。在解释器中,您需要
:-
。检查您正在使用的特定Prolog实现的在线文档。iirc,Prolog的艺术,如notation@CapelliCTAOP是一本书,对吗?我确实说过这种符号是用在书本上的我的观点是,你不能将它复制/粘贴到Prolog REPL中,而希望使用它。@潜伏者:从PDF复制/粘贴应该是可行的,只要它是文本,而不是位图。无论如何,理解代码肯定远远超出了复制/粘贴的范围。我只是展示了Prolog源代码的灵活性,特别是现在我们有了UTF8。事实上,我甚至不在乎什么代码
可能是…@capelical当然是可行的。这完全取决于使用了什么字符集。我认为展示这个特殊的角色是多么的酷。我只是不认为它回答了这个问题。