В схеме (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
, поэтому я не могу предложить, как их исправить.