GNU Prologをインストールするには

「7つの言語 7つの世界」第4章の学習のために、GNU Prolog(プロログ)言語をインストールします。

プロローグと読んでいたけど、プロログなんだね。

7つの言語 7つの世界

  • Ruby
  • Io
  • Prolog
  • Scala
  • Erlang
  • Cloijure
  • Haskell

GNU Prolog

The GNU Prolog web site

Git repository (Source Forge)
https://sourceforge.net/p/gprolog/code/ci/457f7b447c2b9e90a09956ff15fd277d269b1d98/tree/

最新バージョンは 1.4.5、2018-10-23更新。

SWI Prolog

SWI-Prolog

Git repository (GitHub)
https://github.com/SWI-Prolog/swipl

最新バージョンは、8.2.0、2020-05-27 リリース。

prolog installで検索したら、SWI-Prologがヒットしたよ

書籍では、GNU Prolog 1.3.1 を使っているそうよ。

拡張子は .pl。VS CodeではPerlのラクダアイコンが表示されてしまったよ。

行末のドット(.)を忘れないでね

Windows 10

GNU Prolog

http://www.gprolog.org/#download のページから、Windows intel 64 bits auto-install setup (compiled under x86_64 / Windows 7 with MSVC++). をダウンロードしてください。

ダウンロードしたインストーラを起動してください。

インストール先はこのままです。

メニューもこのままです。

拡張子の関連付けです。好みでチェックをはずしてください。筆者は、.pl のチェックをはずしました。

Installボタンをクリックします。

すぐにインストールは完了しました。

デスクトップのGNU Prologアイコンをダブルクリックすると、GNU Prolog consoleウィンドウが表示されました。バージョンは、1.4.5です。

File>Change Dir... で、GNU Prolog consoleウィンドウのカレントディレクトリを選択します。

筆者は、friends.pl を C:\Users\aoki.makoto\projects\personals\study_7lang\prolog\friends.pl に作成したので、C:\aoki.makoto\taro\projects\personals\study_7lang\prolog を選択しました。

macOS(Mac OS X) 10.15.4

GNU Prolog

homebrewでインストールします。

$ brew install gnu-prolog

バージョンは、GNU Prolog 1.4.5 でした。

$ gprolog --version Prolog top-Level (GNU Prolog) 1.4.5 By Daniel Diaz Copyright (C) 1999-2018 Daniel Diaz GNU Prolog comes with ABSOLUTELY NO WARRANTY. This is free software; see the source or the file named COPYING for copying conditions. $ which gprolog /usr/local/bin/gprolog

コマンドラインのヘルプ

$ gprolog --help Usage: gprolog [OPTION]... --consult-file FILE consult FILE inside the the top-level --init-goal GOAL execute GOAL before entering the top-level --entry-goal GOAL execute GOAL inside the top-level --query-goal GOAL execute GOAL as a query for the top-level -h, --help print this help and exit --version print version number and exit -- do not parse the rest of the command-line Report bugs to bug-prolog@gnu.org.

インタープリタを起動します。

$ gprolog GNU Prolog 1.4.5 (64 bits) Compiled Aug 20 2018, 15:27:00 with clang By Daniel Diaz Copyright (C) 1999-2018 Daniel Diaz | ?-

インタープリタのヘルプは、Ctrl + C を押してから、"e"を押します。

$ gprolog GNU Prolog 1.4.5 (64 bits) Compiled Aug 20 2018, 15:27:00 with clang By Daniel Diaz Copyright (C) 1999-2018 Daniel Diaz | ?- Prolog interruption (h for help) ? e $

Ubuntu 18.04

GNU Prolog

aptでインストールします。

$ sudo apt install gprolog

バージョンは、GNU Prolog 1.4.5 でした。

$ gprolog --version Prolog top-Level (GNU Prolog) 1.4.5 By Daniel Diaz Copyright (C) 1999-2016 Daniel Diaz GNU Prolog comes with ABSOLUTELY NO WARRANTY. This is free software; see the source or the file named COPYING for copying conditions. $ which gprolog /usr/bin/gprolog

コマンドラインのヘルプ

$ gprolog --help Usage: gprolog [OPTION]... --consult-file FILE consult FILE inside the the top-level --init-goal GOAL execute GOAL before entering the top-level --entry-goal GOAL execute GOAL inside the top-level --query-goal GOAL execute GOAL as a query for the top-level -h, --help print this help and exit --version print version number and exit -- do not parse the rest of the command-line Report bugs to bug-prolog@gnu.org.

インタープリタを起動します。

$ gprolog GNU Prolog 1.4.5 (64 bits) Compiled Feb 5 2017, 10:30:08 with gcc By Daniel Diaz Copyright (C) 1999-2016 Daniel Diaz | ?-

インタープリタを終了するには、Ctrl + C を押してから、"e"を押します。

$ gprolog GNU Prolog 1.4.5 (64 bits) Compiled Feb 5 2017, 10:30:08 with gcc By Daniel Diaz Copyright (C) 1999-2016 Daniel Diaz | ?- Prolog interruption (h for help) ? e $

何がいけないのか、p76 の friendでエラーが...

| ?- friend(wallace, wallace). no | ?- friend(grommit, wallace). uncaught exception: error(existence_error(procedure,likes/0),friend/0) | ?- friend(grommit, wallace). uncaught exception: error(existence_error(procedure,likes/0),friend/0)

Ubuntuでは、SWI-Prologで試すことにしました。

SWI Prolog

aptでインストールします。

$ sudo apt install swi-prolog

コマンド名は、swipl。バージョンは、SWI-Prolog 7.6.4 でした。

$ swipl --version SWI-Prolog version 7.6.4 for amd64 $ which swipl /usr/bin/swipl

コマンドラインのヘルプ

$ swipl --help swipl: Usage: 1) swipl --help Display this message (also -h) 2) swipl --version Display version information (also -v) 3) swipl --arch Display architecture 4) swipl --dump-runtime-variables[=format] Dump link info in sh(1) format 5) swipl [options] prolog-file ... [-- arg ...] 6) swipl [options] [-o output] -c prolog-file ... 7) swipl [options] [-o output] -b bootfile -c prolog-file ... Options: -x state Start from state (must be first) -[LGT]size[KMG] Specify {Local,Global,Trail} limits -t toplevel Toplevel goal -g goal Initialisation goal -f file User initialisation file -F file System initialisation file -l file Script source file -s file Script source file -p alias=path Define file search path 'alias' [+/-]tty Allow tty control -O Optimised compilation --nosignals Do not modify any signal handling --nodebug Omit generation of debug info --quiet Quiet operation (also -q) --traditional Disable extensions of version 7 --home=DIR Use DIR as SWI-Prolog home --pldoc[=port] Start PlDoc server [at port]

インタープリタを起動します。

$ swipl Welcome to SWI-Prolog (threaded, 64 bits, version 7.6.4) SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software. Please run ?- license. for legal details. For online help and background, visit http://www.swi-prolog.org For built-in help, use ?- help(Topic). or ?- apropos(Word). ?-

インタープリタのヘルプは、Ctrl + C を2回押してから、"e"を押します。

$ swipl Welcome to SWI-Prolog (threaded, 64 bits, version 7.6.4) SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software. Please run ?- license. for legal details. For online help and background, visit http://www.swi-prolog.org For built-in help, use ?- help(Topic). or ?- apropos(Word). ?- ^C ^C WARNING: By typing Control-C twice, you have forced an asynchronous WARNING: interrupt. Your only SAFE operations are: c(ontinue), p(id), WARNING: s(stack) and e(xit). Notably a(abort) often works, but WARNING: leaves the system in an UNSTABLE state Action (h for help) ? exit $

p98 fd_domain、fd_all_different

SWI-Prologには、fd_domain、fd_all_different がないようです。

GNU PrologSWI-Prolog
fd_domain(Puzzle, 1, 4)%% sudoku.plの先頭で
:- use_module(library(clpfd)).

Puzzle ins 1..4
fd_all_different(Head)all_different(Head)

結果を省略表示しないようにするには

結果のリストが長いと、省略表示されてしまいます。

?- sudoku([_,_,2,3, _,_,_,_, _,_,_,_, 3,4,_,_], S). S = [4, 1, 2, 3, 2, 3, 4, 1, 1|...].

質問の最後を「; true.」にすると、w待ちになるので、wを押すと、省略せずに表示されます。

?- sudoku([_,_,2,3, _,_,_,_, _,_,_,_, 3,4,_,_], S); true. S = [4, 1, 2, 3, 2, 3, 4, 1, 1|...] [write] <-- ここでwを押す S = [4, 1, 2, 3, 2, 3, 4, 1, 1, 2, 3, 4, 3, 4, 1, 2]
Help: I want the whole answer

";"を押さずに、すべての解を表示するには

また、";"を押さずに、すべての結果を表示するには、質問の最後に「, print(解), nl, fail.」を追加するといいようです。

?- eight_queens([(1,A), (2,B), (3,C), (4,D), (5,E), (6,F), (7,G), (8,H)]), print([A,B,C,D,E,F,G,H]), nl, fail. [1,5,8,6,3,7,2,4] <-- ";"の入力待ちにならない [1,6,8,3,7,4,2,5] [1,7,4,6,8,2,5,3] [1,7,5,8,2,4,6,3] [2,4,6,8,3,1,7,5] (省略)
prolog - スペースバーを押さずにSWI-Prologですべての回答を表示するにはどうすればよいですか?

参考サイト

Kobe University Prolog Home Page (in Japanese)
Prolog index
全学計算機システム上でのSWI-Prologの使い方(暫定版)

Prolog 入門と演習 2020年4月14日
http://www.k-techlabo.org/www_prolog/prolog_main.pdf

おすすめ書籍

「Prologの技芸」と「Prologへの入門(PrologとAI)」がバイブル的な存在ね

「Prologの技芸」は中古で8000円以上もするよ!

もともと定価5800円と高いのね。

「Prologへの入門(PrologとAI)」を読んだらどうかしら?

Leon Sterling, Ehud Shaprio, 構造計画研究所, 1988
Ivan Bratko 近代科学社 1990
安部 憲広 共立出版 1985
タイトルとURLをコピーしました