0

我正在尝试学习序言,但遇到了这个错误,我不知道为什么会得到它,所以我寻求您的帮助。

代码(TPROLOG#86):

trace 

domains
    item = integer
    intList = item*

predicates
    member(item,intList)

clauses
    member(elm,[elm|_]).

    member(elm,[_|T]):-  %%%  ***ELM is seen as wrong type, why?***
        member(item,[T]).

goal
    member(5,[1,2,3,4,5])

欢迎任何建议或提示。谢谢你。

4

1 回答 1

1

你混淆了变量和原子。原子以小写字母开头,而变量以大写字母开头。

另外,您的member/2定义似乎是错误的。它应该是:

clauses
    member(Elm,[Elm|_]).
    member(Elm,[_|T]):-  
        member(Elm,T).

第一个子句将元素与第二个列表的头部匹配。第二个子句跳过第二个列表的头部并递归调用member/2以在列表的尾部找到另一个匹配项。

于 2012-10-31T12:33:27.333 回答