我目前对这个问题感到头疼 - 它让我疯狂。我是Prolog的新手,所以我仍然了解它的基础知识。从标题中,我要做的就是从列表中删除一个元素,然后从结果列表中反转它。
到目前为止,我对这些函数如何在不同列表中分别进行了一些研究,但我不确切知道如何在单个列表中执行这两个函数(删除然后反向)..
我的反向和删除如下:
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).
我的尝试:
delete_reverse(Element, [Element|Tail], Tail1) :-
// no idea what im doing below..
del(Element, Tail, Tail1),
reverse(Tail1, Tail).
答案 0 :(得分:1)
首先,您的del
缺少一个基本案例:
del(_,[],[]).
然后,您的delete_reverse
几乎正确:您应该使用其他变量名来统一del
的结果和reverse
的输入:
delete_reverse(Element, [Element|Tail], Tail1) :-
del(Element, Tail, Temp),
reverse_family(Temp, Tail1).