SICP練習 150 練習4 6

2021-09-07 03:12:31 字數 1103 閱讀 2555

這道題須要我們將let表示式轉換成對應的表示式。

(let (( ) … ( )) )

從上面的演示樣例我們能夠看到在let表達中。如果其為expr。用cdr能夠得到(( ) … ( )),然後再用高階函式map搭配car來取出所有的var。

相同的,如果要取出exp部分,先用cadr,再用高階函式map搭配cadr。

而body部分用caddr就能夠直接求出了。

然後就能夠開始寫let->combination,其傳入乙個引數expr。

((lambda ( … ) ) )

依據這段演示樣例**呢,我們先呼叫書中第256頁的make-lambda來構造前面的一部,這個函式有兩個引數parameter和body。

這樣一來就所有都完畢了,當然了,還須要將let?

增加到eval中。在此之前也要定義let?

相同要呼叫第256頁的tagged-list?

。那麼接下來就是詳細的**咯。

(define

(let-vars expr)

(map

car (cadr expr)))

(define

(let-exp expr)

(map

cadr (cadr expr)))

(define

(let-body expr)

(caddr expr))

(define

(let->combination expr)

(cons

(make-lambda

(let-vars expr)

(let-body expr))

(let-exp expr)))

(define

(let?

expr) (tagged-list?

expr 'let)) ((let?

expr) (eval

(let->combination expr) env))

SICP練習 150 練習4 6

這道題需要我們將let表示式轉換成相應的表示式。let 從上面的示例我們可以看到在let表達中,假設其為expr,用cdr可以得到 然後再用高階函式map搭配car來取出所有的var。同樣的,如果要取出exp部分,先用cadr,再用高階函式map搭配cadr。而body部分用caddr就可以直接求出...

SICP練習 46 練習2 5

練習2.5 這道題的意思是有乙個新的cons,其接受兩個引數a b,並且返回 2 a 3 b 這個比較容易實現了。define cons a b expt 2 a expt 3 b cons 2 2 value 36 根據題中的意思,並將其與car和cdr模擬,得知car是要分離出2 a,cdr是要...

SICP練習 46 練習2 5

練習2.5 這道題的意思是有乙個新的cons,其接受兩個引數a b,並且返回 2 a 3 b 這個比較容易實現了。define cons a b expt 2 a expt 3 b cons 2 2 value 36 根據題中的意思,並將其與car和cdr模擬,得知car是要分離出2 a,cdr是要...