我正在做一个练习,我试图使用 =.. 谓词编写一个过程,该过程删除 List 中 PredName(X) 失败的所有元素,并将剩余列表作为结果返回:
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],
我有以下内容,但我不确定为什么在使用上面的示例进行测试时我会一直出错:
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).
我从这里得到了上面的代码。