Scheme 应用:不是过程不匹配错误

Scheme 应用:不是过程不匹配错误,scheme,lisp,racket,non-procedure-application,Scheme,Lisp,Racket,Non Procedure Application,我正在尝试实现一种对单元格的读写功能 (define (read-write-get cell) (cell (list))) (define (read-write-set cell x) (cell (list x))) (define (read-write-cell x) (let ((cell '())) (read-write-set cell x))) (define w1 (read-write-cell 10)) (check-equal? 10 (re

我正在尝试实现一种对单元格的读写功能

(define (read-write-get cell) (cell (list)))
(define (read-write-set cell x) (cell (list x)))

(define (read-write-cell x)
   (let ((cell '()))
       (read-write-set cell x)))

(define w1 (read-write-cell 10))
(check-equal? 10 (read-write-get w1))
我一直在犯错误

应用:不是一个程序; 应为可应用于参数的过程 给定:'() 论据。。。: 错误跟踪…:

在Scheme
(xy)
中,表示将函数
x
应用于参数
y
。所以

(define (read-write-set cell x) (cell (list x)))
定义一个函数
读写集
,当使用作为函数的第一个参数调用该函数时,该函数将该函数
单元格
,应用于计算
(列表x)
(使用第二个参数的唯一元素构建列表)的结果

然后,在:

(define (read-write-cell x)
   (let ((cell '()))
       (read-write-set cell x)))
使用第一个参数调用
读写集
,该参数不是一个函数,而是一个空列表(因为在let中将
单元格
分配给
”()


因此,“非过程;预期过程”指的是
读写集
的第一个参数的值,它不是过程,而是列表。我不清楚
read-write-get
read-write-set
的预期行为,因此我无法建议如何纠正它们。

很难猜测什么是“一种单元读写函数”,但我怀疑SICP会对您有所帮助。我编写了一些测试来描述我试图实现的内容(定义a1(读写单元25))(检查等于?25(读写获取a1))(定义a2(读写集a1 30))(检查等于?30(读写获取a2))@JohnSmith,您应该决定如何实现该单元。作为闭包(即具有环境的函数)?作为可修改的数据结构?或者别的什么?您想要测试的函数是单元抽象的接口,但是单元本身必须以某种特定的、具体的方式实现。你知道我是如何做到这一点的吗?@JohnSmith,你可以在molbdnilo评论中提供的链接中找到详细的讨论。