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/gprologCode language: Bash (bash)

コマンドラインのヘルプ

$ 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.
Code language: Bash (bash)

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

$ 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
| ?- 
Code language: Bash (bash)

インタープリタのヘルプは、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

$Code language: Bash (bash)

Ubuntu 18.04

GNU Prolog

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

$ sudo apt install gprologCode language: Bash (bash)

バージョンは、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/gprologCode language: Bash (bash)

コマンドラインのヘルプ

$ 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.
Code language: Bash (bash)

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

$ 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
| ?- 
Code language: Bash (bash)

インタープリタを終了するには、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

$Code language: Bash (bash)

何がいけないのか、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)
Code language: Bash (bash)

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

SWI Prolog

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

$ sudo apt install swi-prolog
Code language: Bash (bash)

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

$ swipl --version
SWI-Prolog version 7.6.4 for amd64


$ which swipl
/usr/bin/swipl
Code language: Bash (bash)

コマンドラインのヘルプ

$ 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]
Code language: Bash (bash)

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

$ 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).

?- 
Code language: Bash (bash)

インタープリタのヘルプは、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

$Code language: Bash (bash)

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|...].
Code language: Prolog (prolog)

質問の最後を「; 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]Code language: Prolog (prolog)
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]
(省略)
Code language: Prolog (prolog)
https://ja.coder.work/so/prolog/1017538

参考サイト

http://bach.istc.kobe-u.ac.jp/prolog/
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をコピーしました