=.. 述語を使用して、PredName(X) が失敗した List 内のすべての要素を削除し、残りのリストを Result として返す手順を記述しようとしている演習に取り組んでいます。
filter(List, PredName, Result)
この場合、PredName は次のように定義されます。
test(N) :- atom(N).
例えば:
?- filter([a,b,-6,7,A,-1,0,B], test, L).
L = [a,b,-6,7,-1,0],
私は次のものを持っていますが、上記の例でテストしたときに結果として false になり続ける理由がわかりません:
test(N):-
atomic(N).
filter([], _, []).
filter2([H|T], PredName, [H|S]):-
Goal =.. [PredName, H],Goal,filter(T, PredName, S),!.
filter([H|T], PredName, S) :-
filter2(T, PredName, S).
上記のコードはhereから取得しました。