(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

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を解く作業に戻る。