Это из книги 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? Я вообще не понимаю эту часть. Любая помощь приветствуется, спасибо!