2

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

(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))

我不断收到错误

申请:不是程序;期望可以应用于给定参数的过程:'()参数...:错误跟踪...:

4

1 回答 1

3

在 Scheme(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的第一个参数不是函数,而是一个空列表(因为在 letcell中分配了)。'()

所以,“不是程序;期望一个过程”是指 的第一个参数的值read-write-set,它不是一个过程,而是一个列表。我不清楚 and 的预期行为read-write-getread-write-set因此我无法建议如何纠正它们。

于 2019-02-13T07:25:38.803 回答