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).

最初の句は、要素を2番目のリストの先頭と一致させます。2番目の句は、2番目のリストの先頭をスキップし、再帰的に呼び出しmember/2て、リストの末尾にある別の一致を検索します。

于 2012-10-31T12:33:27.333 に答える