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评论中提供的链接中找到详细的讨论。