Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 删除prolog中嵌套列表中所有出现的元素_List_Data Structures_Prolog - Fatal编程技术网

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)。