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,我会得到相同的列表。这似乎也不符合逻辑。