ちょっと試し
関数合成とかで組み合わせたりした方がスマートに書けるなあという例が浮かんだけれども、そのコストが気になったりした。というか、そもそも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