Это из книги SICP, которая, как я уверен, многие из вас знакомы. Это ранний пример в книге, но я чувствую чрезвычайно важную концепцию, которую я пока еще не могу получить. Вот он:
(define (cons x y)
(define (dispatch m)
(cond ((= m 0) x)
((= m 1) y)
(else (error "Argument not 0 or 1 - CONS" m))))
dispatch)
(define (car z) (z 0))
(define (cdr z) (z 1))
Итак, я понимаю, что car
и cdr
определяются в пределах области cons
, и я получаю, что они сопоставляют некоторый аргумент z
с 1 и 0 соответственно (аргумент z
является некоторым cons
). Но скажите, что я называю (cons 3 4)
... как оцениваются аргументы 3 и 4, когда мы сразу переходим к этой внутренней процедуре dispatch
, которая принимает некоторый аргумент m
, который мы еще не указали? И, может быть, что более важно, в чем смысл возвращения "dispatch
? Я вообще не понимаю эту часть. Любая помощь приветствуется, спасибо!