我只是按照SICP 3.3.3中的说明创建表。我编写的代码效果很好。
这是代码_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。
; plus:目前我删除了code_0中的“ #lang方案”
代码_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}}
这一切怎么了?
它与Scheme中的LIST,DrRacket问题或语言的版本/标准有关?
问题是这assoc
是方案中的现有功能。尝试将函数重命名为my-assoc,它将按预期工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句