もうひとつのScheme入門 7.繰り返し の練習問題4 letrec
letrecの練習問題といた。なかなかなかなかとっつきにくい関数だなと思った。
ついでにletrecの役立つ話とかをついでにリンク。
1243. Re. 1242. Re. Scheme 入門 7. 繰り返し
【scheme】letrecで階乗
scheme, Gauche: let、let*、letrec
ソースコードと実行結果
4-a(define (my-reverse-letrec lst) (letrec ((iter (lambda (lst0 result-lst) (if (null? lst0) result-lst (iter (cdr lst0) (cons (car lst0) result-lst)))))) (iter lst ())))
実行結果
(my-reverse-letrec '(1 2 3 4 5 6)) (6 5 4 3 2 1) (my-reverse-letrec '()) ()
4-b
(define (my-sum-letrec lst) (letrec ((iter (lambda (lst0 sum) (if (null? lst0) sum (iter (cdr lst0) (+ (car lst0) sum)))))) (iter lst 0)))
実行結果
(my-sum-letrec '(10 20 30 40 50)) 150 (my-sum-letrec '()) 0
4-c
(define (my-string-to-integer-letrec str) (letrec ((iter (lambda (lst0 result-num) (if (null? lst0) result-num (iter (cdr lst0) (+ (- (char->integer (car lst0)) 48) (* result-num 10))))))) (iter (string->list str) 0)))
実行結果
(my-string-to-integer-letrec "1234567890") 1234567890 (my-string-to-integer-letrec "") 0