スキームの '(()) と (cons null null) の違いについて混乱しています。
以下のコードは、b
とc
が完全に同じであることを示しています。
(define (dup2 x)
(let ((d '(())))
(set-car! d (car x))
(set-cdr! d (cdr x))
d))
(define a '(1 2))
(define b (dup2 a))
(define c (dup2 a))
(set-car! b 2)
> c ;; --> (2 2)
ただし、dup
代わりに使用するとdup2
:
(define (dup x)
(let ((d (cons null null)))
(set-car! d (car x))
(set-cdr! d (cdr x))
d))
(define a '(1 2))
(define b (dup a))
(define c (dup a))
(set-car! b 2)
> c ;; --> (1 2)
変数b
とc
は異なります。いくつかの実験を行いましたが、まだ理解できていません。