DrRacket编写Scheme中的“not a proper list”错误

时间:2015-07-24 05:26:02

标签: scheme racket sicp

我只需按照SICP 3.3.3的说明创建表格。 我写的代码效果很好。

这里是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)

此外,我想将该表作为其他文件中的库引用,所以我写了一个code_1.scm。

;加:我此时删除了code_0中的“#lang scheme”

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:不是正确的列表:{{0。 0}}

所有这一切都有什么问题?

关于该计划的LIST,DrRacket的问题,还是语言的版本/标准?

1 个答案:

答案 0 :(得分:2)

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