monadoの焼き方。

リスト操作。

(define (fold callback start lis)
 (if (eq? lis '())
  start
  (fold callback (callback (car lis) start) (cdr lis))
))
(define (map callback lis)
 (fold
  (lambda (cur prev) (cons (callback cur) prev))
  '()
  lis))
(define (reverse lis) (map (lambda (x) x) lis))