for-each 구현 (SICP 139쪽) 학술

연습문제 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
()

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://www.xeraph.com/tb/4031371 [도움말]

핑백

  • Xeraph beyond the Great Firewall : 2008년 회고록 (작성 중) 2008-12-18 00:05:09 #

    ... ICP 6차 문제 할당SICP 5차 모임용 문제 풀이 할당SICP 그림 언어 연습car와 cdr의 사용 (SICP 142쪽)for-each 구현 (SICP 139쪽)square-list 구현 (SICP 138쪽)SICP 3차 코드 북SICP 3차 모임 발제 및 문제 풀이 할당SIC ... more

덧글

댓글 입력 영역