0

考虑这两个类似的过程:

(define (append-internal-cons obj)
  (let ((local-var (cons 1 '()) ))
    (append! local-var (list obj))
    local-var))

(define (append-internal-no-cons obj)
  (let ((local-var '(1) ))
    (append! local-var (list obj))
    local-var))

鉴于这两个帮助程序:

(define (append! x y)
  (set-cdr! (last-pair x) y)
            x)
(define (last-pair ls)
  (if (null? (cdr ls))
             ls
             (last-pair (cdr ls))))

将第一个调用三次会产生预期的结果:一个包含我们传入的1内容的列表。obj

(append-internal-cons 2) ;; (1 2)
(append-internal-cons 3) ;; (1 3)
(append-internal-cons 4) ;; (1 4)

我希望调用第二个版本三次会产生相同的结果,但事实并非如此。

(append-internal-no-cons 2) ;; (1 2)
(append-internal-no-cons 3) ;; (1 2 3)
(append-internal-no-cons 4) ;; (1 2 3 4)

两个过程的行为不应该相同吗?

4

0 回答 0