📘

Prolog を Jupyter Notebook で動かしたい

2023/12/30に公開

1. はじめに

Prolog の実行環境って不便ですよね.だって:

  • ソースコードを編集するたびにいちいちファイルを読み込む必要がある
  • 質問内容も実行しなおすたびに同じ文章を入力する必要がある

とっても面倒です.過去にはこんな悲劇も:

https://zenn.dev/fjktkm/articles/7dd7e95f19213d#1.2.-prolog,あるいはプロローグ

さて,想定している対象読者なら Jupyter Notebook については触れたことがあると思います.語弊を恐れずに言えば,インタラクティブな Python の実行環境ですね.そう,Jupyter Notebook で Prolog が動いたら便利ですよね.

2. 環境構築

Visual Studio Code の Dev Container 機能を使います.知らない人は調べてね!まぁそこまで難しいことはないと思います.それで,Dev Container 用の設定ファイル devcontainer.json は次のようにします:

.devcontainer/devcontainer.json
{
	"name": "Prolog Jupyter",
	"image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye",
	"postCreateCommand": "sudo apt-get update && sudo apt-get install -y swi-prolog && pip install --upgrade pip && pip3 install --user jupyter prolog_kernel && python -m prolog_kernel.install",
	"customizations": {
		"vscode": {
			"extensions": [
				"ms-python.python",
				"ms-toolsai.jupyter",
				"rebornix.prolog"
			]
		}
	}
}

とはいえ Dev Container の使い方がわからない方もいると思うので,インストール手順を簡単に解説していきます.

まず,Prolog を Jupyter Notebook で使うには,Prolog をインタラクティブに実行するための Jupyter カーネルが必要になります.ここでは以下のリポジトリで開発されている Herculog というカーネルを利用します:

https://github.com/hhu-stups/prolog-jupyter-kernel

これを実行するのに必要なものが次のとおりです:

  • Python
  • Jupyter
  • SWI Prolog

そういうわけで順番にインストールしていきましょう.

まずは Python です.これはどんな方法でもいいと思います.Dev Container を使うなら Python のプリセットを使うのが楽ですね.Git とかもあらかじめ入っているので便利です.

つぎに SWI Prolog です.以下のコマンドを実行すればインストールできます:

sudo apt-get install -y swi-prolog

つぎに Python パッケージたちのダウンロードです.以下のコマンドを実行すればよいです:

pip3 install jupyter prolog_kernel

さいごに Prolog 用のカーネルをインストールします:

python -m prolog_kernel.install

インストール直後はカーネルがうまく認識されないようなので,一度 Visual Studio Code のウィンドウをリロードする必要があります.画面右上のカーネルを選択するメニューから Prolog を選択しましょう.これですべての準備が整ったはずです.

3. 実行例

試しに実行してみました:

SWI Prolog のシェルだと . で処理の続行をしていたのが,Jupyter Notebook では実行中にインタラクティブな入力を与えることができないので,代わりに ?- retry. というような形で記述する形式になっているのが大きな違いですかね.ちなみに続行しない場合は ?- cut. みたいです.詳しい内容は:

https://nbviewer.org/github/anbre/prolog-jupyter-kernel/blob/master/notebooks/feature_introduction/swi/using_jupyter_notebooks_with_swi_prolog.ipynb

今回動作検証に利用したソースコードはこちら:

https://github.com/fjktkm/prolog-jupyter-kernel-example

GitHubで編集を提案

Discussion