List 删除Prolog中列表的第一个元素
我的问题是如何删除列表中的第一个元素,直到元素出现(第一次出现)。 列表可以有重复的元素 例如 到目前为止,我得到的是:List 删除Prolog中列表的第一个元素,list,prolog,elements,List,Prolog,Elements,我的问题是如何删除列表中的第一个元素,直到元素出现(第一次出现)。 列表可以有重复的元素 例如 到目前为止,我得到的是: remove_elements(Element, [], []). remove_elements(Element, [Element|Tail], [Tail]). remove_elements(Element, [Head|Tail], [Tail]) :- Head \== Element, remove_elements(Element, Tail,
remove_elements(Element, [], []).
remove_elements(Element, [Element|Tail], [Tail]).
remove_elements(Element, [Head|Tail], [Tail]) :-
Head \== Element,
remove_elements(Element, Tail, Tail).
我不能使用任何图书馆
如果<代码>元素<代码>位于第一位置,则该解决方案是正确的,但如果是在中间,则失败。
谢谢只要稍加修改,小心统一
remove_elements(Element, [], []).
remove_elements(Element, [Element|Tail], [Element|Tail]).
remove_elements(Element, [Head|Tail], List) :-
Head \== Element, remove_elements(Element, Tail, List).
条款S和T在以下情况下是统一的:
- S和T是相同的常数
- sat是(自由)变量(S和T相等(它们共同引用))
- S是一个变量,T是一个术语≠ 变量(T项替换为变量S)
- T是一个变量,S是一个术语≠ 变量(术语S替换为变量T)
- sat是复合项(具有相同的主函子,相应的参数是可统一的)
?- f(X,a(b,c)) = f(d,a(Y,c)).
X=d,Y=b
?- f(X,a(b,c)) = f(Y,a(Y,c)).
X=Y=b
?- f(c,a(b,c)) = f(Y,a(Y,c)).
false。
Tail
已经是一个列表,与您在此上下文中使用的方式相同。所以你不想要[Tail]
。这将是一个由单个列表元素组成的列表。可以使用append/3和member/2吗?
?- f(c,a(b,c)) = f(Y,a(Y,c)).