焦らずゆっくりと、勉強を続けております。
こんなペースで大丈夫なんだろうか。
まぁ、無理に続けて途中で投げ出しちゃうよりはいいかな、と思っております。
さてさて、今日の分。
まず、述語 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
------------------------------------------------
これとかアレですよね。
後々、ハイレベルな人が使いますー、みたいなやつっぽいですよね。知りませんが。
次は、再帰がでてくるそうです。
ついに、プログラミングが始まる、って感じですね。
飽きない程度のペースで、頑張っていきたいと思います。