EoPL reading (18) 1.2.4 Exercises

昨晩のエントリ、番号間違えてた。ってか、朝の通勤時に

  (define (car&cdr-inner rslt slist)
    (cond ((null? slist) errvalue)
          ((eq? s (car slist))
           (make-result 'car rslt))
          ((pair? (car slist))
           (let ((ret (car&cdr-inner (list 'car rslt) (car slist))))

じゃなくて

  (define (car&cdr-inner rslt slist)
    (cond ((null? slist) errvalue)
          ((eq? s (car slist))
           (make-result 'car rslt))
          ((pair? (car slist))
         (let ((ret (car&cdr-inner (make-result 'car rslt) (car slist))))

の方が適当なの?って思ってたんですが、そうでも無い。と思ってたらそうでした。上の実装だと

gosh> (car&cdr 'cat '((cat) dog lion) 'fail)
(lambda (x) (car (car ())))
gosh>

なんですが、下のだと

gosh> (car&cdr 'cat '((cat) dog lion) 'fail)
(lambda (x) (car (car x)))
gosh>

になります。試験が足りてませんな。