1

私を助けてください!SWI-Prologがわかりません

リストL1からリストL2まで、リストL1の次の3つの項目の算術平均に等しい別の要素。L1要素の数が3で割り切れない場合、リストL2の最後の項目は、最近の1つまたは2つの項目リストL1の合計を3で割ることによって得られます。リストL1がプロンプト画面に導入されました。その結果、プログラムは入力L1およびL2の結果リストを出力する必要があります。

リストアイテムはリクエストに応じて入手できます。

4

1 に答える 1

1

この質問は、ほぼ一言一句プロローグに翻訳されます。

まず、基本ケースを追加して、空のリストが空のリストに変換されることを示します。

by_three([], []).

次に、最初のアイテム、、、およびを3つのグループに分けて取得し、それらを平均化するためのメインルールを追加H1H2ますH3

by_three([H1,H2,H3|T],[A|RT]) :- A is (H1+H2+H3) / 3, by_three(T, RT).

ここでの再帰呼び出しに注意してください。元のリストの末尾は、ルールの最後の呼び出しでにT変換されます。RTby_three/2

最後に、1要素リストと2要素リストにさらに2つのケースを追加します。

by_three([H],[A]) :- A is H / 3.
by_three([H1,H2],[A]) :- A is (H1+H2) / 3.

これで完了です。

于 2012-11-14T21:17:31.890 に答える