SICPを読む(36) 2.1.3 データとは何か。
プログラムを見て「印刷ミス」なんじゃないかと思った。
(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))
こんなので、consが定義出来るはずが無い!!
うそだぁぁぁ〜〜〜!!
と、しばらく考えてしまった。
束縛
キーワードは「束縛」にあった。
(cons 1 2)で、#
なんと、xとy(1と2)を「束縛」した状態で#
(cons 1 2) ; #<procedure:dispatch> (car (cons 1 2)) ; 1 (cdr (cons 1 2)) ; 2
僕の常識が音を立てて崩れ始めた。
- 1.3.4で手続きから手続きを作り出したが、これも引数の手続きを束縛した状態だと思う。
- JavaScriptもこんな感じなのかなぁと思ってみた。