したがって、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-carandをどのように定義するのか疑問に思っていますoriginal-cdr。スキームでプロシージャのコピーを作成する方法はありますか? または、この問題を解決する別の方法があります。どうも