我是Prolog的新手,遇到了这个谓词select/3
。尽管我不确定自己将如何实现它,但我知道了它是如何工作的。我认为是这样的:
selec(El,[El|T],T).
selec(El,[H|T],[H|S]) :-
selec(El,T,S).
select(El,[],[]).
我知道出事了我的解决方案仅删除第一次出现的情况。我希望它删除所有出现的内容,就像
select/3
一样。有任何想法吗?
最佳答案
您的代码非常好,除非您不需要select(El,[],[]).
谓词。
这就是您所需要的:
selec(El,[El|T],T).
selec(El,[H|T],[H|S]) :-
selec(El,T,S).
请记住,标准的prolog参数顺序是输入,然后是输出,因此您应该这样写:
selec([El|T],El,T).
selec([H|T],El,[H|S]) :-
selec(T,El,S).