приложение: не ошибка несоответствия процедуры - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь реализовать функцию чтения-записи в ячейку.

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

Я получаю сообщение об ошибке

приложение: не процедура;ожидается процедура, которая может быть применена к заданным аргументам: '() arguments ...: errortrace ...:

1 Ответ

0 голосов
/ 13 февраля 2019

В схеме (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 с первым аргументом, который не функция, нопустой список (так как '() назначен на *1019* в let).

Итак, «не процедура;Ожидаемая процедура »относится к значению первого аргумента read-write-set, который является не процедурой, а списком.Мне не ясно, предполагаемое поведение read-write-get и read-write-set, поэтому я не могу предложить, как их исправить.

...