1

我目前正忙于这个问题——它让我发疯。我是 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).
4

1 回答 1

1

首先,您del缺少一个基本案例:

del(_,[],[]).

然后,您delete_reverse几乎是对的:您应该使用不同的变量名来统一 的结果del和输入reverse

delete_reverse(Element, [Element|Tail], Tail1) :-
    del(Element, Tail, Temp),
    reverse_family(Temp, Tail1).
于 2012-08-21T12:59:41.437 回答