我是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).

09-11 18:55