[英]SWI-Prolog, first delete an element then reverse the resulting list
I currently have my head wrapped around this issue - its driving me crazy. 目前,我对这个问题感到困惑-这使我发疯。 I'm new to Prolog, so I'm still understanding the very basics. 我是Prolog的新手,所以我仍然了解基本知识。 From the title, all I'm trying to do is delete an element from a list, and then from that resulting list, reverse it. 从标题中,我要做的就是从列表中删除一个元素,然后从结果列表中将其反转。
So far, I done a bit of research in how do these functions separately on different lists, but I don't know exactly how to perform both of them (delete then reverse) on a single list.. 到目前为止,我对如何在不同的列表上分别执行这些功能进行了一些研究,但我不知道如何在单个列表上执行这两个功能(先删除再反转)。
My reverse and delete are below: 我的撤消和删除如下:
reverse(List, RevList) :-
reverselist(List, [], RevList).
reverselist([], RevList, RevList).
reverselist([E|Elements], Accu, RevList) :-
reverselist(Elements, [E|Accu], RevList).
del(Element, [Element|Tail], Tail).
del(Element, [Y|Tail], [Y|Tail1]) :-
del(Element, Tail, Tail1).
And my attempt: 我的尝试:
delete_reverse(Element, [Element|Tail], Tail1) :-
// no idea what im doing below..
del(Element, Tail, Tail1),
reverse(Tail1, Tail).
First, your del
is missing a base case: 首先,您的del
缺少基本情况:
del(_,[],[]).
Then, your delete_reverse
is almost right: you should use a different variable name to unify the results of del
and the input of reverse
: 然后,您的delete_reverse
几乎是正确的:您应该使用其他变量名来统一del
的结果和reverse
的输入:
delete_reverse(Element, [Element|Tail], Tail1) :-
del(Element, Tail, Temp),
reverse_family(Temp, Tail1).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.