Я пытаюсь определить процедуру, которая принимает целое число и возвращает его представление в цифрах Черча. Может ли кто-нибудь помочь мне понять ошибку, которую я делаю? Следующий код - это то, что я смог сделать до сих пор.
(define succ
(lambda (cn)
(lambda (f)
(lambda (x)
(f ((cn f) x))))))
(define (n->cn n)
(if (= n 0)
zero
(succ (n->cn (lambda (x) (- x 1))))))
Когда я запускаю тест:
(test (num->cn 3) three)
Я получаю следующую ошибку:
exception (num->cn 3) at line 107
expected: <no-expected-value>
=: contract violation
expected: number?
given: #<procedure:...ad/racket-file.rkt:99:21>
argument position: 1st
other arguments...:
0
Кажется, он ожидает число? но процедура дана. Что, по моему мнению, соответствует назначению процедуры? Спасибо за помощь и комментарии для новичка.