私は学生で、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/2
member/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) .