Skip to content

2.23

; The procedure for-each is similar to map. It takes as arguments a procedure 
; and a list of elements. However, rather than forming a list of the results, 
; for-each just applies the procedure to each of the elements in turn, from 
; left to right. The values returned by applying the procedure to the elements 
; are not used at all—for-each is used with procedures that perform an action, 
; such as printing. For example,
; (for-each (lambda (x) (newline)
;                 (display x))
;                 (list 57 321 88))
; 57 321 88
; The value returned by the call to for-each (not illustrated above) can be 
; something arbitrary, such as true. Give an implementation of for-each.

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

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

; 57
; 321
; 88
; Value: #t