我正在尝试实现某种对单元格的读写功能。
(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))
我不断收到错误消息
应用程序:不是过程; 期望可以应用于参数的过程 给定:'() 参数...: 错误跟踪...:
答案 0 :(得分:3)
在方案(x y)
中表示将函数x
应用于自变量y
。所以
(define (read-write-set cell x) (cell (list x)))
定义一个函数read-write-set
,当使用作为函数的第一个参数调用该函数时,将该函数cell
应用于求值(list x)
的结果(该结果将用唯一元素(第二个参数)。
然后,在:
(define (read-write-cell x)
(let ((cell '()))
(read-write-set cell x)))
您用第一个参数调用read-write-set
,第一个参数不是功能,而是一个空列表(因为cell
被分配给let中的'()
)
因此,“不是程序;期望过程”是指read-write-set
的第一个参数的值,它不是过程而是列表。对我来说,read-write-get
和read-write-set
的预期行为尚不清楚,因此我无法建议如何纠正它们。