要素 X は、リスト L に存在するか?
♪ プログラムコード code
love:uema% cat member.pl % member.pl member_1( A, [A|_] ). member_1( A, [_|L] ) :- member_1( A, L ). member_2(A,[B|R]) :- \+(var(A)),ground([B|R]),A = B,!. member_2(A,[A|_]). member_2(A,[_|R]) :- member_2(A,R). love:uema%
実行例
love:uema% swipl -q -s member.pl ?- member_1( a, [a,b,c] ). true ; false. ?- member_1( b, [a,b,c] ). true ; false. ?- member_1( c, [a,b,c] ). true ; false. ?- member_2( a, [a,b,c] ). true. ?- member_2( b, [a,b,c] ). true. ?- member_2( c, [a,b,c] ). true. ?- member_1( a, [A,B] ). A = a ; B = a ; false. ?- member_2( a, [A,B] ). A = a ; B = a ; false. ?-
?- member_1( a, [a,b,c] ). true ; false. ?- member_2( a, [a,b,c] ). true. ?-
上を見ると、member_1の方は、余計な false という表示が出ます。
member_2 の方がスマートな動きをします。
member_1 は、書籍に載っています。
member_2 は、尾崎さんが書きました。