私を助けてください!SWI-Prologがわかりません
リストL1からリストL2まで、リストL1の次の3つの項目の算術平均に等しい別の要素。L1要素の数が3で割り切れない場合、リストL2の最後の項目は、最近の1つまたは2つの項目リストL1の合計を3で割ることによって得られます。リストL1がプロンプト画面に導入されました。その結果、プログラムは入力L1およびL2の結果リストを出力する必要があります。
リストアイテムはリクエストに応じて入手できます。
この質問は、ほぼ一言一句プロローグに翻訳されます。
まず、基本ケースを追加して、空のリストが空のリストに変換されることを示します。
by_three([], []).
次に、最初のアイテム、、、およびを3つのグループに分けて取得し、それらを平均化するためのメインルールを追加H1
しH2
ますH3
。
by_three([H1,H2,H3|T],[A|RT]) :- A is (H1+H2+H3) / 3, by_three(T, RT).
ここでの再帰呼び出しに注意してください。元のリストの末尾は、ルールの最後の呼び出しでにT
変換されます。RT
by_three/2
最後に、1要素リストと2要素リストにさらに2つのケースを追加します。
by_three([H],[A]) :- A is H / 3.
by_three([H1,H2],[A]) :- A is (H1+H2) / 3.
これで完了です。