とんちゃんといっしょ

Cloudに関する技術とか日常とかについて書いたり書かなかったり

6章終わった

バイト中だけど社長もEeePC弄って遊んでるから、気にせずGaucheの勉強。
本日で無事に6章を終えた。


本日の成果

;length
(define (length lis)
 (if (pair? lis)
  (+ 1 (length (cdr lis)))
  0))
;filter
(define (filter proc lis)
 (if (null? lis)
  '()
  (if (proc (car lis))
   (cons (car lis) (filter proc (cdr lis)))
   (filter proc (cdr lis)))
 ))
;reverse
(define (reverse lis)
 (define (reverse-rec proc init lis)
  (if (null? lis)
   init
   (reverse-rec proc (proc (car lis) init) (cdr lis))))
 (reverse-rec cons '() lis))

reverseは末尾再帰で書いてみた。
しかしやっぱりまだLISP脳にはなれないな・・・・