SICP問題2.23

(define (for-each proc items)
  (proc (car items))
  (if (null? (cdr items))
      #t
      (for-each proc (cdr items))))

実験

 (for-each (lambda (x) (newline) (display x))
      (list 57 321 88))
; 
; 57
; 321
; 88#t

普通のリストはOK。でもitemsが空リストの場合、ダメだなぁ。ということでカンニング

(define (for-each func items)
  (cond ((null? items) #t)
        (else
         (func (car items))
         (for-each func (cdr items)))))

わざわざ cond を使ったのは、else 節で複数の式を評価させる必要があるから。

http://sicp.naochan.com/memo.pl?p=%CC%E4%C2%EA2.23

なるほど、ifとcondの違いが、こういう場合に利いてくるということか。元のページ見るとbegin使えばifでも書けるということも書かれていますね。奥が深い。