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 に答える