我当前的谓词eo
将从第一个元素开始删除列表中的所有其他元素。
eo([],[]).
eo([_],[]).
eo([_,X|L],[X|R]) :- eo(L,R)].
产生类似
的结果?- eo([a,b,c,d,e,f],L).
L = [b,d,f]
和
?- eo([a,b,c,d,e,f,g],L).
L = [b,d,f]
但是现在,我想创建一个“深”版本。此版本还将影响子列表。因此,应满足以下条件:
?- eo([a,b,c,d,e,[x,y,z],L).
L=[b,d,[y]]
不确定该怎么办。
答案 0 :(得分:0)
因此,以您现在拥有的为基础,这基本上是您必须进行的更改:
eo([],[]).
eo([_],[]).
eo([_,X|L],[X2|R]) :-
(is_list(X) -> %% is X a list?
eo(X, X2) %% - yes, so recur on it
; X2 = X %% - no, so just pass it through
),
eo(L,R).