プログラミングを上達させたい

情報学専攻の大学院→放送局でCMの営業など@大阪→舞台俳優&IT営業@東京

Prolog 触ってみました。

Prolog、初日です。

とりあえず色々動かしてみたりしました。

今回教科書とする本は

『Prologで作る数学の世界』という本です。

 

 

http://www.amazon.co.jp/Prolog%E3%81%A7%E4%BD%9C%E3%82%8B%E6%95%B0%E5%AD%A6%E3%81%AE%E4%B8%96%E7%95%8C%E2%80%95Prolog%E3%81%9D%E3%81%97%E3%81%A6%E9%9B%86%E5%90%88%E2%80%90%E4%BD%8D%E7%9B%B8%E2%80%90%E7%BE%A4-%E9%A3%AF%E9%AB%98-%E8%8C%82/dp/4254110545

 

Prolog関連の本ではかなり異色そうな内容なのですが、面白そうなのでこれにしました。

吉と出るか凶と出るか・・・

とりあえず一通り最後までいけるように頑張ります。

 

ただ、少し困る部分は、この本と僕が使ってるPrologの方言が違うということです。

教科書はRUN/PROLOG、僕はGNU/PROLOGです。

そのため、最初から入っている述語が若干違うため、少々手こずりました。

 

その辺も勉強だと思い、へこたれず頑張っていこうと思います。

 

さて、今回の勉強について。

普通のPrologの本だったら、

 

gist6950555

 

というプログラムを書いて、以下のようにして

-----------------------------------------------------------------------------------------

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

であると。これなら上の結果も納得ですね。

 

 

 

どうやらかなり曲者のようですが、頑張って続けていきたいと思います。

次からは練習問題もあり、少し楽しくなりそうです。

 

そもそも、練習問題とかって、載せていいんですかね・・?

少しならいいのかな?

その辺も、ちょっと調べてみなければ。

何か知ってる方がいればご教授下さい。

では、今回はここまでで。