ちょっと試し

関数合成とかで組み合わせたりした方がスマートに書けるなあという例が浮かんだけれども、そのコストが気になったりした。というか、そもそもGaucheにおいて(lambda (x) x)のコストてどんなもんだ。

gosh> (define (nest n) (let loop ((i 1) (f (lambda (x) x))) (if (= i n) f (loop (+ i 1) (lambda (x) (f x))))))
nest
gosh> (define f1 (nest 1))
f1
gosh> (define f123456 (nest 123456))
f123456
gosh> (time (f1 10))
;(time (f1 10))
; real   0.000
; user   0.000
; sys    0.000
10
gosh> (time (f123456 10))
;(time (f123456 10))
; real   0.007
; user   0.010
; sys    0.000
10

俺に知覚できないくらいたいしたことないようなので安心することにする。


あとGaucheには関数合成のためのそのまんまcomposeという手続きが組み込みで用意されてた。

gosh> ((compose (lambda (x) x) (lambda (x) x) (lambda (x) x)) 10)
10

test