0

=.. 述語を使用して、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から取得しました。

4

2 に答える 2