我是prolog的新手,如果两个火车站在同一条线上,我正在尝试写一个返回“Yes”的谓词。
line(1,[a,b,c,d,e]);
line(2,[b,g,f,e,i,h]);
line(3,[l,m,g,n,f,o,p,q,i,j]);
same_line(X,Y):-
line(_,L),
member(X,L),
member(Y,L).
实施例: ? - same_line(n,j)。 是
但是,编译时我在WIN-PROLOG中遇到此错误:错误67:谓词保护
我做错了什么?
答案 0 :(得分:0)
回答,以便问题从未答复的列表中删除 问题:是(;)/ 2是一个问题。如果你真的只是 想要是或否,您也可以尝试使用memberchk / 2而不是member / 2。 代码如下:
line(1,[a,b,c,d,e]).
line(2,[b,g,f,e,i,h]).
line(3,[l,m,g,n,f,o,p,q,i,j]).
same_linechk(X,Y):-
line(_,L),
memberchk(X,L),
memberchk(Y,L).
按预期工作:
?- same_linechk(n,j).
true.
谓词memberchk / 2是SWI-Prolog的一部分而不是 在第一次找到匹配成员后回溯。 它基本上是一个内置切割的menber / 2,因此 平均速度是平均值的两倍。
再见