Scheme始めました
今はやり(?)の関数型プログラミング言語。
どれがいいのかよくわからないけど SICP が Scheme らしいのと、いろんな人にお勧めされたので Scheme にしました。
とりあえずある程度 Scheme 出来るようになったら他の関数型言語も弄ってみて違いを見てみたいと思います。
とりあえず処理系は Gauche(ゴーシュと読みます。がうちぇじゃないです)にした。MacPorts にあるので
sudo port install gauche
でインストール完了。すばらしいですね。
gosh と打てば起動するので、適当に遊びましょう。ちなみに終了するときは(exit)です。
SICP なんて高価な本は持ってないし、学校にもおそらく入ってないので入門ページなどを読みながら適当に遊びます。
とりあえず、僕はここ読んでます。
gosh> (+ 1 2)
3
どこかで見たことあるぞ。ああ、ポーランド記法ですね。 これが、うわさの S 式・・・、しびれる><
あと個人的に感動したのが、
gosh> (/ 2 3)
2/3
分数扱ってる!
Lisp 系言語では一般的らしいけど、プログラミング言語で直接分数を扱える物って始めて見た気がするよ(世界が狭いです)
gosh> (/ 4 6)
2/3
もちろん約分だってしてくれる!
分母と分子を持って最大公約数とか調べて約分してるのかこれ。
分数のデータ構造が気になるな。
ちなみに実数にしたいときは
gosh> (exact->inexact(/ 2 3))
0.6666666666
exact->inexact で実数にするって言うのはわかったけどなにこれ。
とくに->とかわかんね。このアロー演算子みたいなのが謎。exact(クラス的ななにか?)の inexact 関数ってことなのだろうか。
とか考えてたら、演算子でもなんでもなくてそのまま関数名だった。
つまり、exact(正確な値=分数)から inexact(不正確な値=実数)に変換する関数ということか。
C 言語とかっぽくかけば exact2inexact みたいな、そういう命名規則みたいな感じらしい。なるほど
というか、演算子が関数っぽく扱えるけど、処理系では演算子と関数の違いを区別してるのかな。
+関数とか/関数みたいなのが定義されているんだろうか。
そもそも、演算子って存在するの?
今のところは、シェルを使っているせいもあるけど、プログラミング言語というよりは Matlab みたいな計算機へのインターフェースみたい。
関数定義とかしたり、入出力とかその他いろいろごにょごにょ出来ればプログラミングっぽいな。
とりあえず、今日のところはこんな感じ。
と、言うような感じで Scheme 勉強日記を書こうと思うけど、やる気が持つかどうか。