SICP練習 46 練習2 5

2022-04-11 03:31:51 字數 532 閱讀 4925



練習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是要分離出3^b。

(define (car x)

(if (= 0 (remainder x 2))

(+ 1 (car (/ x 2)))

0))(define (cdr x)

(if (= 0 (remainder x 3))

(+ 1 (cdr (/ x 3)))

0))測試一下咯。

(define x (cons 2 2))

;value: x

(car x)

;value: 2

(cdr x)

;value: 2

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是要...

SICP練習 150 練習4 6

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