TheSeasonedSchemer (2)

早速 12. 読んだと連絡が入る。

上記エントリ見つつとりあえず読んでみよ。
letrec という特殊形式を使って手続きの中で定義される手続きを云々とのこと。とりあえずこの書き方は知ってたのですが、

(define multirember
  (lambda (a lat)
    (letrec
      ((mr (lambda (lat)
             (cond ((null? lat) '())
                   ((eq? a (car lat)) (mr (cdr lat)))
                   (else
                     (cons (car lat) (mr (cdr lat))))))))
      (mr lat))))

こっちは初めてかも。

(define multirember
  (lambda (a lat)
    ((letrec
       ((mr (lambda (lat)
              (cond ((null? lat) '())
                    ((eq? a (car lat)) (mr (cdr lat)))
                    (else
                      (cons (car lat) (mr (cdr lat))))))))
       mr)
     lat)))

あるいはこんな記述とか。

(define multirember
  (letrec
    ((mr (lambda (lat)
           (cond ((null? lat) '())
                 ((eq? a (car lat)) (mr (cdr lat)))
                 (else
                   (cons (car lat) (mr (cdr lat))))))))
    mr))

次で call/cc が出てくるらしい。つか、凄いボリュームな模様。
あと試験は以前 make 使ってやってた記憶あり。是非トライしてみて欲しいですね。