我写了一个成员函数来检查一个元素是否存在于一个列表中。成员函数给出奇怪的结果。
member(X, [X|_]).
member(X, [_|Y]) :- member(X, Y).
我将.pl文件加载到SWI prolog中,并且我没有收到有关成员的警告或错误。我测试成员函数使用...
member(A, [1,2,3,4]).
这,显然应该返回false。相反,我得到
A = 1
然后,当我试图进入新的命令时,IDE只是表明我,我输入的钥匙,并说不明行动“什么都键I按下”
我觉得我的成员函数声音,因为它与我的教授写的相匹配。
任何想法?
为什么'member(A,[1,2,3,4])*显然返回false *?对于A = 1和A = 2,A = 3和A = 4,显然应该是成功的。当它显示“A = 1”时,如果有(根据Prolog文档),您需要按SPACE或';'查看下一个结果。 – lurker
可能性是,这个谓词不是由你的教授写的。 'member/2',这个实现,已经存在几十年了,我想呢?我在1986年出版的死树教科书中看到过它,但我猜它早于这本书。 – 2017-04-15 08:08:40
@Boris:最近〜不到10年,'member/2'成了一个真正的内置。所以提供它的定义是很自然的。 – false