2008. 4. 24.

연습문제 2.32

모든 부분집합을 가져오기위해서는

개별 부분집합과 나머지 요소의 결합을 만드는 것이 필요하다.

따라서 개별부분집합을 가져오는 (cdr list)로 구해지는 각각의 rest 요소를 (car list)와 결합하는 작업이 필요하다

그러므로 준 식의 빈 부분을 채우면

(define (subsets s)
  (if (null? s)
      (list nil)
      (let ((rest (subsets (cdr s))))
        (append rest
                (map
                 (lambda (n) (cons (car s) n)) rest)))))


이 되어야한다.

댓글 없음:

댓글 쓰기