Gaucheのモジュールを書いてみた
SICPを解いているとどうしてもaverageとかsquareとかfibとか、突拍子もなく出てきて「あー、書かないとダメかー」っていう思いを何度もすると思う。
いや、もしかしたら早い段階で気付いた人は、どっかのファイルにまとめて書きだして
(add-load-path "hogehoge")
とか、ちゃんと書いてるのかもしれない。というか書いてると思う。賢明な読者なら。
けど、僕は書いていなかった。うん。度々squareって書いてるよ。めんどくさいと
(lambda (x) (* x x))
とか適当に突っ込んじゃう。
駄目だ。これじゃあダメだ。
というわけで、意を決してモジュール書いてみた。たぶん、そんな仰々しいことしなくてもいいと思う。けど、気持ちの問題でやってみた。うん。
こんな感じ。
(define-module sicp.util (export square fib)) (select-module sicp.util) (define (square x) (* x x)) (define (fib n) (cond ((zero? n) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)))))) ;;(provide "sicp/util") ;;もうprovideって書く必要はあまりないみたい
まだ、そんなに大きくない。fibとsquareがたまーに出てくるから書いただけ。
ポイントはdefine-moduleとexport、それとselect-moduleくらいかな?
だいたいこの辺を参照したら普通に書いてある。
で、こんな感じで使いたいファイルの頭にこう書く。
(add-load-path "/Users/user-name/SICP/lib") (use sicp.util)
たぶん、これであってる。だいたいあってるはず!
ということでSICPを解く作業に戻る。