"not a proper list" DrRacket写Scheme错误

"not a proper list" error in DrRacket writing Scheme

我只是按照 SICP 3.3.3 的说明创建 table。 我写的代码运行良好。

这里是code_0.scm:

#lang scheme

(require rnrs/base-6)
(require rnrs/mutable-pairs-6)

(define (make-table)
  (list '*table*))

(define (assoc key records)
  (cond ((null? records)
         false)
        ((equal? key (caar records))
         (car records))
        (else
         (assoc key (cdr records)))))

(define (insert! key value table)
  (let ((record (assoc key (cdr table))))
    (if record
        (set-cdr! record value)
        (set-cdr! table
                  (cons (cons key value)
                        (cdr table)))))
  'OK)

(define (lookup key table)
  (let ((record (assoc key (cdr table))))
    (if record
        (cdr record)
        false)))


(define table (make-table))

(insert! 0 0 table)
(insert! 1 1 table)
(insert! 2 2 table)

此外,我想在其他文件中引用 table 作为库,所以我写了一个 code_1.scm.

;补充:我此时删除了code_0中的“#lang方案”

code_1.scm:

#lang scheme/load
(load "code_0.scm")

(define table-0 (make-table))

(insert! 0 0 table-0)
(insert! 1 1 table-0)
(insert! 2 2 table-0)

编译错误显示:

assoc: not a proper list: {{0 . 0}}

这一切有什么问题?

是关于Scheme中的LIST,DrRacket的问题,还是语言的version/standard?

问题是assoc是scheme中已有的函数。尝试将函数重命名为 my-assoc,它将按预期工作。