-1

こんにちは、誰かがプロローグでこの問題を手伝ってくれますか:

私はこれをprolog penultimoに持っています

([1,2,3,4,5],X) 

そして、私はこれを取得する必要があります

X = [1,2,3,5]

リストの最後の要素を削除する必要があります。

私を助けてください!

4

2 に答える 2

1

あなたのコードには 2 つのケースがあると思います。- リストの最後に到達するための 1 つと、リストの最後を処理するための 1 つ。

Last 要素を削除するコードの書き方を知っていますよね? -これは (通常) 「終了」の場合に行われ、最後の要素を見てそれを無視し、(通常) 以前に呼び出された述語を介して再帰によって回答リストを構築するための基礎として使用される空のリストを返します。

ヒント: 「終了」ケースを 1 つではなく 2 つの要素で表示するようにできますか?

于 2013-09-26T08:37:28.037 に答える
1

もちろん、いくつかの方法があります。

append を使用してリストを分解/再構築します (非効率的):

delete_prelast(L, R) :- append(H, [_,X], L), append(H, [X], R).

(修正された)コメントから、より効率的:

quitapenultimo([_,X],[X]) :- !.
quitapenultimo([X|T],[X|R]) :- quitapenultimo(T,R).

収量

?- quitapenultimo([1,2,3,4,5],R).
R = [1, 2, 3, 5].
于 2013-09-26T08:40:24.977 に答える