prolog中嵌套列表项的删除

prolog中嵌套列表项的删除,prolog,Prolog,我正在编写这段序言代码,以删除列表(包括嵌套列表)中元素的所有引用。但是,它没有删除元素,而是将其替换为空列表 这是我的密码: del(Item, [Head|Tail], [HeadResult|TailResult]) :- del(Item, Head, HeadResult), del(Item,Tail,TailResult), !. del(Item,[], []). del(Item, Item, []). del(Item, Head, Head).

我正在编写这段序言代码,以删除列表(包括嵌套列表)中元素的所有引用。但是,它没有删除元素,而是将其替换为空列表

这是我的密码:

del(Item, [Head|Tail], [HeadResult|TailResult]) :-
   del(Item, Head, HeadResult),
   del(Item,Tail,TailResult), 
   !. 
del(Item,[], []). 
del(Item, Item, []). 
del(Item, Head, Head).
我相信这一行是罪魁祸首。但是,我不知道如何更改,使其不会出现在我的新列表中

想要输出的示例:

remberD(a, [a,b,c,[a,b]], New).

New = [b,c,[b]].

您正在尝试使用

del(项目,[Head | Tail],[HeadResult | TailResult]):-%错误
del(项目、头部、头部),
删除(项目、尾部、尾部结果)。
看起来不错,但如果
Head=Item
?结果应该是
TailResult
在这种情况下,根本不应该有任何
HeadResult

del(项目,[Item | Tail],TailResult):-
删除(项目、尾部、尾部结果)。
现在,如果它不是输入列表头部的
,该怎么办?两种情况-要么是一个列表,我们需要进入其中,要么不是一个列表,我们只是保持原样:

del(项目,[Head | Tail],[HeadResult | TailResult]):
Head\=项目,Head=[124; 124;],
del(项目、头部、头部),
删除(项目、尾部、尾部结果)。
del(项目[头|尾],[头|尾结果]:-
标题\=项目,标题\=[124; 124;],
删除(项目、尾部、尾部结果)。
另一种情况是尝试从空列表中删除某些内容:

del(u,[],[])。

这假设您总是使用完全实例化的术语调用此谓词。

也提出了这个问题。你可能想通读一些评论,试着逻辑思考。如果
del(X,Y,Z)
是一个谓词,其中元素
X
从列表
Y
中删除,产生结果
Z
,那么显然
del(Item,Item,[])。
没有意义,因为第二个参数不应该与被删除的项相同。也许你的意思是,
del(Item,[Item],])。
del(Item,Head,Head)
说如果我从任何列表中删除
Item,我会得到相同的列表。这似乎也不符合逻辑。