名前付きlet
名前付きletなコードを見たけど、全然意味不明だったので、10から0まで足してみる。
名前付きlet
(define (sum n) (let iter ((i n) (s 0)) (if (= i 0) s (iter (- i 1) (+ i s))))) (sum 10) ; 55
どうやら、反復の簡易記法として使えるみたい。宣言部は、初期化するだけ。うぅん。わかりにくい。
ついでに、反復いろいろ。
do
ACL見て使える!!と思ってみたり。
(define (sum n) (do ((i n (- i 1)) (s 0 (+ s i))) ((= i 0) s))) (sum 10) ; 55
最短。doの方がちょっとわかりやすい。
letrec
letrec法
(define (sum n) (letrec ((iter (lambda (i s) (if (= i 0) s (iter (- i 1) (+ i s)))))) (iter n 0))) (sum 10) ; 55
最近letrec使ってるな。激しくなんとなくなんだけど。
define
無難にdefine
(define (sum n) (define (iter i s) (if (= i 0) s (iter (- i 1) (+ i s)))) (iter n 0)) (sum 10) ; 55
無難だ。