HN🔥 203
💬 32

ポケモンで学ぶProlog入門!論理プログラミングの基礎を楽しく理解しよう

birdculture
3日前

ディスカッション (11件)

1
Modified3019
約17時間前

最初は戸惑ったけど、最後の方になって、例としてポケモンを選ぶのが、Prologがいかに問題を解決できるかを示す上で実はかなりうまくいっていることに気づいた。ちょっとどこかで試してみたい気分。

2
Almondsetat
約16時間前

ポケモンのようなゲームで、特定のアルゴリズム(論理プログラミング、ニューラルネット、線形計画法など)を使って参加者が競い合うような公開トーナメントってあるのかな?

3
macintux
約16時間前

Joe Armstrongが最初のErlangの実装をPrologで書けたっていうのは、今でも信じられないほど驚かされる。ソースコードのコピーをもらっておけばよかった。

4
lagrange77
約15時間前

大学時代、PrologとLispを教えるコースは「エンジニアのための人工知能」って名前だったな。

5
triska
約14時間前

すごくいいね!Scryer Prologの議論の中で、AlexがPrologコードの改良案や考慮事項をいくつか共有していて、メタプログラミングを使ってより汎用的な関係を自動生成する方法なんかも提案されているよ:https://github.com/mthom/scryer-prolog/discussions/3221 。続きの記事も楽しみにしている!あと、Alexによる「factgraph.pl」もかなり面白いプログラムだね:https://github.com/alexpetros/factgraph.pl 。これはIRS Fact GraphをPrologで実装したもので、「法をコードとして扱う(Law as Code)」の応用事例だよ。

6
admeliora01
約13時間前

このユースケースすごくいいね。Magic the Gatheringでも同じようなものを実装したくなった。scryfallを使うのは大好きだけど、Commanderみたいな絶えずカードプールが増え続けるエターナルフォーマットでデッキを組むなら、記述的なルールに基づいたCLIファーストなアプローチの方がずっと効率的だと思う。今はキーワード検索でどうにかしてるんだけどね。

7
jodrellblank
約13時間前

「解の末尾が 'or false' で終わることを気にしないでください。これは探索アルゴリズムの仕組みによるもので、ソルバーがこれ以上の解を探そうとして失敗しただけです。なぜ時々こうなるのか完全に理解しているわけではありませんが、想定通りの挙動です」

これについては『The Power of Prolog[1]』で解説されていたと思う。Prologの回答はターミナルへのテキスト出力ではなく、有効なPrologターム(データ/コード)なんだ。だから、コードと同じように「OR」として「;」が使われる。回答の (x ; y ; false) は「クエリに対する回答はx、またはy、それ以外には見つからなかった」という意味。もし僕より詳しくて上級者なら、これをメタプログラミングに使って、結果を推論したり、LISP的なデータとしてコードを書き換えたりできるはず。

Prologシステムは可能な場合、探索せずに正しい回答へジャンプする最適化を行う(例えば事実やルールに対するデータベーススタイルのインデックスなど)。そういうケースでは、最初の回答を表示した後に探索すべきコードが残っていないから、ユーザーに「残りのコードからさらに解を探すか?」と促す必要もなく、結果として「探索終了、これ以上見つからず」を意味する「false」も表示されないんだ。

[1] https://www.metalevel.at/prolog

8
stellartux
約12時間前

もしこれがあなたの記事なら、learns_priority/3 にタイプミスがあるよ。「move_priority #> 0」は「P #> 0」であるべき。

9
Joker_vD
約11時間前

次のようにクエリを実行します:
(SQLコードブロック)

うーん、これって代わりにこう書けないかな?
(SQLコードブロック)

10
fl1pper
約11時間前

ポケモンの世界観をよく知らないんだけど、誰かPrologを使ってポケモンについて説明してくれない?