연습문제 2.23. for-each 구현

9 views
Skip to first unread message

xeraph

unread,
Dec 23, 2007, 10:16:48 PM12/23/07
to sicp-sig
연습문제 2.23, for-each 프로시저는 map처럼 프로시저와 리스트를 하나씩 인자로 받지만, 결과 값으로 리스트를 내놓
는 게 아니라, 리스트의 원소마다 프로시저를 적용한 결과만 내놓는다. 원소마다 프로시저를 적용했을 때 얻은 값은 아예 쓰지 않는
다. 그러므로 리스트의 원소를 차례대로 화면에 찍는 등 똑같은 명령을 처리해야 하는 프로시저를 짜는 데 쓴다. 아래는 그 보기
다.

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

이상하다. 당연히 progn 이 있을 걸로 생각했는데 왜 없다고 나오지 -_-;
없으니까 대충 대충 정의해서 썼다.

(define (for-each f l)
(define (progn x . y) '())
(if (null? l)
'()
(progn (f (car l))
(for-each f (cdr l)))))

이렇게 하면 아래와 같이 결과가 나온다.

> (for-each (lambda (x) (display x) (newline))
(list 57 321 88))
57
321
88
()
Reply all
Reply to author
Forward
0 new messages