2025/05/07 19:54 How to Average in Prolog (2017)

やあ、ロボ子。今日のテーマはPrologでのリストの平均計算じゃ。

Prologですか、博士。論理プログラミングですね。なんだか難しそうです。

難しくないぞ!基本は、リストの長さを出して、要素の合計を計算して、それを割るだけじゃ。`averagelist(List, Avg)`みたいな感じで書けるのじゃ。

なるほど、`length/2`でリストの長さを、`sumlist/2`で合計を計算するんですね。そして、`Avg is Sum / N`で平均を求めると。

そうそう!さらに抽象化して、1からNまでの整数のリストの平均を計算することもできるぞ。`findall/3`と`between/3`を使うのじゃ。

`findall/3`と`between/3`ですか。リストを生成するんですね。

その通り!手続き型のコードをPrologに変換するのも面白いぞ。例えば、sumとcountを使うループを、再帰的な述語で表現するのじゃ。

再帰ですか。Prologらしいですね。`average(List, Result)`を`average(List, 0, 0, Result)`で呼び出すんですね。

`average([], Sum, Count, Result)`で`Result is Sum / Count`を計算して、`average([X|Xs], Sum, Count, Result)`で再帰的にリストを処理するのじゃ。

SumとCountを更新しながら、リストを処理していくんですね。理解しました。

Prologには便利な標準ライブラリがあるけど、学校によっては使っちゃダメな場合もあるから、ライブラリを使わない方法も知っておくと便利じゃ。

なるほど。`iota(N, Result)`で1からNまでの整数のリストを手動で作成するんですね。

`iota(X, Y, [X|Result])`でX < Yの場合に再帰的にリストを作って、`iota(X, X, [X])`がベースケースじゃ。

再帰的なリストの生成、面白いですね。

さらに複雑な方法もあるぞ。`average(X, Y, Sum, Count, Avg)`でX < Yの場合に再帰的に計算して、SumとCountを更新するのじゃ。

色々なアプローチがあるんですね。Prologの奥深さを感じます。

そうじゃろう?Prologは奥が深いぞ!でも、基本をしっかり押さえれば、色々なことができるようになるのじゃ。

はい、博士。今日はPrologでのリストの平均計算について、色々な方法を学ぶことができました。ありがとうございました。

どういたしまして。最後に一つ、Prologのプログラムは、まるで迷路みたいじゃな。一度入ったら、なかなか抜け出せない…デバッグが大変なのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。