したがって、SICPcons
car
から、 andcdr
をプロシージャとして定義できることがわかります。
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda (p q) p)))
(define (cdr z)
(z (lambda (p q) q)))
list
しかし、リストを作成するために引数を取る事前定義された手続きは、元の を使用しcons
ます。つまり、list
構築されたリストは、私が望む手順ではありません。
(car (list 1 2 3))
;The Object (1 2 3) is not applicable
だから私はこれを書きます:
(define (list . l)
(if (null? l)
'()
(cons (original-car l)
(list (original-cdr l)))))
original-car
andをどのように定義するのか疑問に思っていますoriginal-cdr
。スキームでプロシージャのコピーを作成する方法はありますか? または、この問題を解決する別の方法があります。どうも