List 删除prolog中嵌套列表中所有出现的元素
我正在尝试从嵌套列表中删除特定元素List 删除prolog中嵌套列表中所有出现的元素,list,data-structures,prolog,List,Data Structures,Prolog,我正在尝试从嵌套列表中删除特定元素 delete(X,L,L1)从生成列表的列表L中删除所有出现的X。对于exmaple: ?- delete(a,[a,b,[a,d],c],L1). will give us [b,[d],c]. 我能够从一个简单的非嵌套列表中删除元素,但不知道如何在内部列表中删除它 我的代码: deletelist(Xs,[],Xs). deletelist(Xs,[Y|Ys],Zs):- delete(Xs,Y,As), deletelist(As,Ys,Zs).
delete(X,L,L1)
从生成列表的列表L
中删除所有出现的X
。对于exmaple:
?- delete(a,[a,b,[a,d],c],L1). will give us
[b,[d],c].
我能够从一个简单的非嵌套列表中删除元素,但不知道如何在内部列表中删除它
我的代码:
deletelist(Xs,[],Xs).
deletelist(Xs,[Y|Ys],Zs):- delete(Xs,Y,As),
deletelist(As,Ys,Zs).
任何帮助都将不胜感激您需要更仔细地考虑谓词。你所拥有的似乎有点随机
deletelist(Xs,[],Xs)
表示如果从空列表中删除Xs
,则会得到Xs
。那是不对的。它应该是,如果你从一个空列表中删除任何东西,你会得到一个空列表。也就是说,deletelist(u,[],[])。
我们的递归子句也没有被考虑出来。仔细想想,再试一次。如果您有deletelist(X[X | Xs],R).
将是什么?如果您有deletelist(X[Y | Ys],R)
,该怎么办?如果Y
是一个列表?如果Y
不是列表?等等…@潜伏者对不起,我只是个初学者prolog@lurker如何处理内部列表的情况?一种方法是,在deletelist(X[Y | Ys],R)
情况下,使用is_list(Y)
检查Y
是否是列表。如果是列表(Y)
是真的,那么你需要删除列表(X,Y,R1),…
如果它不是真的(不成功),那么你保持Y
如果dif(X,Y)
(X
和Y
是不同的)。@潜伏者好的,所以我把程序改成了这个。你怎么认为?我仍然不知道如何处理内部列表。删除(u,[],[])。删除(X[X | L],M):-!,删除(X,L,M)。删除(X[Y|L1],[Y|L2]):-删除(X,L1,L2)。