Scheme始めました

今はやり(?)の関数型プログラミング言語。 どれがいいのかよくわからないけどSICPSchemeらしいのと、いろんな人にお勧めされたので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勉強日記を書こうと思うけど、やる気が持つかどうか。