Prolog 列表上存在错误

Prolog 列表上存在错误,prolog,Prolog,我将gprolog allong与gplc一起使用,当我试图编译以下代码时,我得到了致命错误:重新定义内置谓词成员/2。当我试图查阅相同的代码时,我还得到了uncaughtexception:error(存在错误(过程,成员/0),成员/0) 代码: 我提出的问题是: | ?- member(X,[a,b,c,d,e]). X = a ? ; uncaught exception: error(existence_error(procedure,member/0),member/0) 在sw

我将gprolog allong与gplc一起使用,当我试图编译以下代码时,我得到了
致命错误:重新定义内置谓词成员/2
。当我试图查阅相同的代码时,我还得到了
uncaughtexception:error(存在错误(过程,成员/0),成员/0)

代码:

我提出的问题是:

| ?- member(X,[a,b,c,d,e]).

X = a ? ;
uncaught exception: error(existence_error(procedure,member/0),member/0)

swipl
中工作正常。您确定第二个子句的正文中没有空格错误吗?因为基于这个错误,我会说Prolog的目标是调用
成员/0
,所以没有参数。@WillemVanOnsem我对Prolog真的很陌生。你能给我解释一下哪里可能存在间距误差吗?根据我使用这种语言的经验,我以前从未遇到过任何间距问题。提前谢谢!我不明白你的问题。例如,只需将您的
成员
的名称随处更改为
元素_<代码>元素(X,[X | T])。
元素(X,[H | T]):-元素(X,T)。
这不是递归定义的吗?它不会给你错误。然后调用(X,[a,b,c,d,e])的元素u。事实上,我认为@WillemVanOnsem对
member/0
错误的理解是正确的(我在第一次阅读你的问题时就忽略了这一点)。你调用它时一定输入了空格,比如
member(X[a,b,c,d,e])
,Prolog认为你在调用
member/0
member
,没有参数)。@潜伏者:真有耐心!你到底是如何得到那个错误的?当我进行
咨询(用户)
时,我得到
错误:用户:1:本机代码过程成员/2无法重新定义(忽略)
但你得到另一个错误?!?
| ?- member(X,[a,b,c,d,e]).

X = a ? ;
uncaught exception: error(existence_error(procedure,member/0),member/0)