Prolog、初日です。
とりあえず色々動かしてみたりしました。
今回教科書とする本は
『Prologで作る数学の世界』という本です。
Prolog関連の本ではかなり異色そうな内容なのですが、面白そうなのでこれにしました。
吉と出るか凶と出るか・・・
とりあえず一通り最後までいけるように頑張ります。
ただ、少し困る部分は、この本と僕が使ってるPrologの方言が違うということです。
教科書はRUN/PROLOG、僕はGNU/PROLOGです。
そのため、最初から入っている述語が若干違うため、少々手こずりました。
その辺も勉強だと思い、へこたれず頑張っていこうと思います。
さて、今回の勉強について。
普通のPrologの本だったら、
というプログラムを書いて、以下のようにして
-----------------------------------------------------------------------------------------
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- consult('socrates.pl').
yes
| ?- mortal(socrates).
yes
-----------------------------------------------------------------------------------------
三段論法出来た!
とかやるようなんですが、この本はそこから違います。
まず計算から始まります。
こんな感じです。
--------------------------------------------------------------
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- A is 3+2.
A = 5
yes
| ?- A is 3*3.
A = 9
yes
| ?- A is 2+3*3.
A = 11
yes
| ?- A is 3*3,B is A*A.
A = 9
B = 81
yes
-----------------------------------------------------------------
いちいち、 'A is'と入力しなければいけないのは面倒ですね。
この辺からすでに、Prologが普通のプログラミング言語と違うことが分かります。
そして、こんな計算もできるよ、あんな計算もできるよ、という紹介が続いて、
パターン・マッチの話に行きます。
Prologで'='を使うと、それは代入ではなくパターン・マッチをするんだそうです。
両方が定数ばかりの場合はマッチングするかどうか、そして変数が入っている場合は、両辺がマッチするような変数の値を教えてくれるというものです。
例えば、
-------------------------------------------------
| ?- A = 3.
A = 3
yes
| ?- A = 3+3.
A = 3+3
yes
--------------------------------------------------
という感じ。
二つめは A=6 となってくれてもよさそうなんですが、計算をするには算術演算子'is'が必要とのこと。
以下、邪魔くさいので yes を省いて書きます。
省き忘れてるところは、まぁ見逃して下さい。
そして、今回なるほどなと思ったのはこちら。
-----------------------------------------------------------
| ?- A + B = 1 + 2.
A = 1
B = 2
| ?- A + B = 1 + 2 + 3.
A = 1+2
B = 3
| ?- A + B = 1 + 2 + 3 + 4.
A = 1+2+3
B = 4
-----------------------------------------------------------
二つめで 、A = 1, B = 2 + 3 ということはないの?と思ったのですが、ちゃんと説明がありました。
'+'は二項演算子で、つまり '3 + 2'は'+(3,2)'と処理されるとのこと。
そして足し算は数学的に自然な発想から、1+2+3は(1+2)+3という順でされると。
つまり二つめの質問文、
| ?- A + B = 1 + 2 + 3.
は、
| ?- +(A,B) = +( +(1,2), 3).
であると。これなら上の結果も納得ですね。
どうやらかなり曲者のようですが、頑張って続けていきたいと思います。
次からは練習問題もあり、少し楽しくなりそうです。
そもそも、練習問題とかって、載せていいんですかね・・?
少しならいいのかな?
その辺も、ちょっと調べてみなければ。
何か知ってる方がいればご教授下さい。
では、今回はここまでで。