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

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

Prolog 第2回

焦らずゆっくりと、勉強を続けております。
こんなペースで大丈夫なんだろうか。
まぁ、無理に続けて途中で投げ出しちゃうよりはいいかな、と思っております。

さてさて、今日の分。

 


まず、述語 write/1 から。
'/1'というのは、引数の数が1個であることを表している、とのことです。
こんな感じでした。

-----------------------------------------
GNU Prolog 1.3.1
By Daniel Diaz
Copyright (C) 1999-2009 Daniel Diaz
| ?- write(abc).
abc

yes
| ?- write(4+4).
4+4

yes
| ?- A is 3+3,write(A).
6

A = 6

yes
| ?- A is 3+3,write('A').
A

A = 6

yes
-------------------------------------------



そして、文法的な話(ストリングがどう、とか)があって、パターンマッチの話へ。
簡単に言うと、定数同士だったら一致しているかどうか見て、変数と定数ならその変数に定数を代入して、変数と変数ならその2つの変数を同じ変数と見て、全体がマッチするか返す、というものだそうです。
数学的な話をする本なので、計算のマッチングが多かったです。
例としては、こんな感じですかね(ちなみに、変数は大文字からはじまります)。


----------------------------------------------
| ?- 3 = 3.

yes
| ?- 3 = 4.

no
| ?- A = 3.

A = 3

yes
| ?- A = 3 + 2.

A = 3+2

yes
| ?- A + B = 3 + 2.

A = 3
B = 2

yes
| ?- A + B = 2 + d.

A = 2
B = d

yes
| ?- A + B = 2 + C.

A = 2
C = B

yes
| ?- A + B = 2 + 3,B = C.

A = 2
B = 3
C = 3

yes
| ?- A = B, A + B = 2 + 3.

no
| ?- A + B * C = 3 * 2 + 3.

no
| ?- A + B * C = 1 * 2 + 3 * 4.

A = 1*2
B = 3
C = 4

yes

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

また、無名変数というものがあり、'_'で記述できます。
これは、何ともマッチし、そして記憶がない、というものです。
例。
------------------------------------------------
| ?- _ = 3.

yes
| ?- _ = A.

yes
| ?- A + B = _ + 3.

B = 3

yes
| ?- _ = 3,_ = 4.

yes
| ?- _ = 4 + 3.

yes

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

これとかアレですよね。
後々、ハイレベルな人が使いますー、みたいなやつっぽいですよね。知りませんが。

次は、再帰がでてくるそうです。
ついに、プログラミングが始まる、って感じですね。
飽きない程度のペースで、頑張っていきたいと思います。