私は学生で、amzi prolog に問題があります。クラスで、項目がリストのメンバーである場合に true を返す述語があることを学びました。
member(1,[1,2,3])true を返す必要があります。
それでも、私は間違っています。
私は何か間違ったことをしていますか?
助けてください。
よろしく、ID
私は学生で、amzi prolog に問題があります。クラスで、項目がリストのメンバーである場合に true を返す述語があることを学びました。
member(1,[1,2,3])true を返す必要があります。
それでも、私は間違っています。
私は何か間違ったことをしていますか?
助けてください。
よろしく、ID
アムジ!Prolog には (半) 決定論的な (バックトラックしない)組み込みの述語があり、 list.proライブラリを介してロードする必要がある標準があります。is_member/2member/2
定義は 2 行なので、通常はmember/2必要に応じてプロジェクトのソースに の定義を入れます。
アムジ!Prolog の組み込み predicateは、そのドキュメントis_member/2に従って決定論的であり、単純にメンバーシップをテストします。バックトラックでリストのすべてのメンバーが返されるわけではありません。
is_member/2[ sicmember/2] は、Term が List のメンバーであるかどうかをすばやくテストするために使用できます。==要素をテストするために、強力な unify ( ) を使用します。リストのさまざまなメンバーをバックトラックするために使用することはできません。定義は次と同等です。is_member(X, [Y|_]) :- X == Y, !. is_member(X,[_|Z]) :- is_member(X,Z).
@hardmath が別の回答で指摘したように、クラシックmember/2は Amzi の一部です! Prolog のリスト ライブラリ。member/2ただし、Prolog は [ほとんど] Prolog で記述されているため、リスト ライブラリをインポートする必要があり、簡単に作成できます。
member( X , [X|_] ) .
member( X , [_|Xs] ) :- member(X,Xs) .