Когда вы цитируете что-то, например, '(1 2 3 4)
, результатом будет структура данных, созданная во время чтения без какой-либо оценки.
'((car lst) .cdr (lst))))
; ==> ((car lst) .cdr (lst)))
Он делает именно то, что вы говорите. Это все равно что жаловаться, что оценка строки "5 + 5"
не дает вам 10
.
Если вы на самом деле хотите автомобиль чего-то, то вы делаете это:
(define (test lst)
(car lst))
(test '(1 2 3)) ; ==> 1
Вы можете сделать мелкую копию пары следующим образом:
(define (shallow-copy pair)
(cons (car pair) (cdr pair)))
(define test-value (list 1 2 3))
(define shallow-value (shallow-copy test-value)))
(eq? test-value shallow-value) ; ==> #f
(eq? (cdr test-value) (cdr shallow-value)); ==> #t
Я понятия не имею, что ваша процедура должна делать, поэтому не может помочь вам в дальнейшем.