letrec の練習。
cf. 7. 繰り返し – もうひとつの Scheme 入門
の練習問題4より。
my-reverse
リストの要素の順番を反転させる関数 my-reverse。
(define my-reverse
(lambda (ls)
(letrec ((iter (lambda (l1 l2)
(if (null? l1)
l2
(iter (cdr l1) (cons (car l1) l2))))))
(iter ls '()))))
(print (my-reverse '(1 2 3 4 5)))
^o^ > gosh my-reverse4.scm (5 4 3 2 1)
sum
数のリストの要素の合計を求める関数。
(define sum
(lambda (lis)
(letrec ((iter (lambda (l s)
(if (null? l)
s
(iter (cdr l) (+ s (car l)))))))
(iter lis 0))))
(print (sum '(1 2 3 4 5)))
^o^ > gosh sum2.scm 15
string->integer
正の整数を表す文字列を整数に変関する関数。
(define string->integer
(lambda (str)
(letrec ((iter (lambda (ls i)
(if (null? ls)
i
(iter (cdr ls) (+ (* i 10) (- (char->integer (car ls)) 48)))))))
(iter (string->list str) 0))))
(print (string->integer "1234"))
^o^ > gosh string-to-integer2.scm 1234