私は大学の試験のために Prolog を勉強していますが、この演習には問題があります。
要素がリストに属していない
not_member(X,L)
場合に TRUEになる述語を実装します。X
L
私の推論が正しければ、解決策を見つけました。
% FACT (BASE CASE): It is TRUE that X is not in the list if the list is empty.
not_member(_,[]).
% RULE (GENERAL CASE): If the list is non-empty, I can divide it in its Head
% element and the sublist Tail. X does not belong to the list if it is different
% from the current Head element and if it does not belong to the sublist Tail.
not_member(X,[Head|Tail]) :-
X =\= Head,
not_member(X,Tail).
次のクエリが示すように、このコードは数値のリストでうまく機能します。
2 ?- not_member(4, [1,2,3]).
true.
3 ?- not_member(1, [1,2,3]).
false.
ただし、数値以外の要素を含むリストでは機能せず、エラーが報告されます。
4 ?- not_member(a, [a,b,c]).
ERROR: =\=/2: Arithmetic: `a/0' is not a function
なんで?