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

时间:2019-02-13 06:00:28

标签: scheme lisp racket

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

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

我不断收到错误消息

  

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

1 个答案:

答案 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-getread-write-set的预期行为尚不清楚,因此我无法建议如何纠正它们。