Prolog(プロログ)入門 ~ docker で環境構築をする #
大学(University of the People)の授業 CS4402 で Prolog を学びました。
全くの初心者で環境構築の仕方もわからなかったので、同じように困っている方がいるかと思い記事にしました。
前提条件 #
以下を前提条件とします。
- docker と git をインストール済み
環境構築 #
私が作った Github のリポジトリ(https://github.com/shimizu517/prolog-docker)をクローンして、そこで実行したいと思います。
もし自分でロジックを変更したい場合はこのプロジェクトを参考にしていただければと思います。
リポジトリのクローン & REPL 起動 #
git clone https://github.com/shimizu517/prolog-docker.git
cd prolog-docker
docker run -it -v $(pwd)/app:/app -w /app swipl
これで REPL 的なやつが起動して以下のような画面が表示されます。
動作確認 #
facts と rules は REPL の中には書けず、ファイルに書いてロードする必要があるみたいです。
なので、まずは knowledge base (facts と rules)をロードします。
そして、 REPL には Query を書いて実行することができます。
⚠️ REPL の各行の頭には ?- が書かれていることを確認しましょう。もし書かれていなければ REPL が起動していない可能性があります。
% Knowledge base をロードします。
?- ['knowledge_base_1.pro'].
% 色々 Query を投げてみます。
?- studies(charlie, What).
?- studies(Who, csc135).
?- professor(kirke, Students).
* Vishma Shah さん?[1]の記事を参考 & 一部そのまま knowledge base として使用させていただいています。
結果は以下のようになります。
複数の facts, rules に match する Query を投げた場合は、Tab を押すことで複数の fact, rule の回答が戻ってきます。
まとめ #
Prolog は私が今まで使ってきた imperative programming language(Python, JavaScript など)とはかなり異なるパラダイムのプログラミング言語でかなり戸惑いました。
私は普段仕事で docker や AWS を使うので慣れていますが、そうではない方は環境をぱっと作って消すみたいなことをどうやるかわからない方もいると思います。
そういった方で同じく Prolog を勉強している方がいれば、この記事が少しでも参考になれば幸いです。
参考 #
[1] Prolog Examples. (n.d.). Retrieved March 27, 2024, from https://athena.ecs.csus.edu/~mei/logicp/prolog/programming-examples.html