그림 2.24는 Scheme 문으로는 다음과 같다.
Louis Reasoner가 원한 (magnitude z)를 얻기 위해서는 실제로 다음과 같은 호출이 있어야한다.
(apply-generic 'magnitude z)
이전 챕터에서 apply-generic을 가져오면 다음과 같다.
따라서 해당하는 형의 태그내에서 실제로 함수를 발견하지못했기때문에 에러가 발생한다.
apply-generic은 먼저 args의 형을 가져오고 다음에 해당하는 태그에 맞는 함수를 가져온다. 따라서 'complex에 대해 한번, 'magnitude에 대해 한번 수행한다.

(cons 'complex (cons 'rectangular (cons 3 4)))
-> (complex rectangular 3 . 4)
Louis Reasoner가 원한 (magnitude z)를 얻기 위해서는 실제로 다음과 같은 호출이 있어야한다.
(apply-generic 'magnitude z)
이전 챕터에서 apply-generic을 가져오면 다음과 같다.
(define (apply-generic op . args)
(let ((type-tags (map type-tag args)))
(let ((proc (get op type-tags)))
(if proc
(apply proc (map contents args))
(error
"No method for these types -- APPLY-GENERIC"
(list op type-tags))))))
따라서 해당하는 형의 태그내에서 실제로 함수를 발견하지못했기때문에 에러가 발생한다.
apply-generic은 먼저 args의 형을 가져오고 다음에 해당하는 태그에 맞는 함수를 가져온다. 따라서 'complex에 대해 한번, 'magnitude에 대해 한번 수행한다.

댓글 없음:
댓글 쓰기