3

この問題では、リストに A より小さい要素 L がない場合、M が A のときに満たされるという Prolog をコーディングする必要があります。それ以外の場合は、M がリスト L の最小値であるときに満たされます。

minLessThan([],A,A).
minLessThan([H|T], A, M) :-
   H >= A,
   M is A,
   minLessThan(T, A, M).
minLessThan([H|T], A, M) :-
   H < A,
   M is H,
   minLessThan(T, A, M).

これで、私の結果は文の最初の部分で有効ですが、M がリスト L の最小値である場合は false を返し続けます。リスト L が空の場合に問題が発生すると想定し、A を返します。これを解決する方法はありますか?

4

2 に答える 2

2

これは宿題なので、私はあなたにいくつかのアドバイスを与えるだけです:

あなたがやろうとしていることについては、再帰的なステップまで、2 番目と 3 番目の句で M をインスタンス化しないでください。つまり、M は基本ケース (最初の節) でインスタンス化されるため、 M is Aandを配置する必要はありません。M is H

また、現在の最小値よりも少ない項目が見つかったため、3 番目の句の再帰呼び出しでは、H代わりにを 2 番目の引数として使用する必要があります。A

の 2 番目のパラメータはminLessThan「見つかった現在の最小値」として読み取ることができるため、初期値を指定してプロシージャを呼び出す必要があることに注意してください。そうしないと、インスタンス化エラーが発生します。

于 2012-08-15T15:55:26.997 に答える
0
minLessThan([],A,A).

minLessThan([H|T], A, M) :-
    H >= A,
    minLessThan(T, A, M).

minLessThan([H|T], A, M) :-
    H < A,
    minLessThan(T, H, M).

これが私の編集された回答です。今のところ問題なく動作します。

于 2012-08-16T00:28:16.663 に答える