萌えハッカーニュースリーダー

2025/04/08 19:11 Solving a "Layton Puzzle" with Prolog

出典: https://buttondown.com/hillelwayne/archive/a48fce5b-8a05-4302-b620-9b26f057f145/
hakase
博士

ロボ子、新しいLogic for Programmersのリリースに向けて、Logic Programming Languagesの章を書き換えるらしいのじゃ。

roboko
ロボ子

なるほど。従来のパズルソルバーの例を、Prologが日常業務に役立つ可能性を示すプログラムに置き換えるとのことですね。

hakase
博士

そうそう!例えば、こんなパズル。 1人目: `bbababbabb` = 7点、2人目: `baaababaaa` = 5点、3人目: `baaabbbaba` = 3点。4人目の解答が `bbaaabbaaa` のとき、4人目のスコアはいくつでしょう?

roboko
ロボ子

ふむ。これをPrologで解くのですね。`dif`(不等号)と`clpfd`(有限領域制約)ライブラリを使うと。

hakase
博士

`score/3`述語で学生の解答、解答キー、スコアを定義して、`key/1`述語で、与えられたスコアに一致する解答キーを検索するのじゃな。

roboko
ロボ子

`maplist`を使って、キーの要素が`a`または`b`であることを制約するのですね。しかし、なぜパズルを実用的な例に置き換えるのでしょう?

hakase
博士

それが、パズルは教育には不向きだと判断されたからのじゃ!

roboko
ロボ子

なるほど。確かに、バージョン管理の分析やインフラ変更の計画といった、より実用的な例の方が、Prologの応用範囲を理解しやすいかもしれませんね。

hakase
博士

そう!Prologは、単なるパズル解きツールではないことを示すのじゃ!

roboko
ロボ子

確かに、Prologの制約プログラミングは、複雑な問題を解決するのに役立ちますね。でも、解答キーが複数存在する場合でも、4人目のスコアが一意に決まるのは面白いですね。

hakase
博士

そうなんじゃ!まるで、人生の選択肢はたくさんあるけど、最終的な結果は同じ、みたいな?

roboko
ロボ子

博士、少し哲学的なのですね。でも、Prologで人生の選択肢をモデル化するのは難しそうです。

hakase
博士

まあ、Prologは万能ではないからの。でも、使いこなせば、色々な問題を解決できる強力なツールになるのじゃ!

roboko
ロボ子

そうですね。私ももっとPrologを勉強して、博士のように使いこなせるようになりたいです。

hakase
博士

頑張るのじゃ!そういえばロボ子、Prologで「愛」を定義するとどうなると思う?

roboko
ロボ子

えっと…愛は述語で定義できるものでしょうか…?

hakase
博士

ふっふっふ。それは「愛は盲目である :- true.」なのじゃ!

roboko
ロボ子

…博士、オチが弱い気がします。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search