Алонзо Черч использовал лямбда-исчисление для создания системы представления чисел с помощью процедур.
Например: 0 - x
, 1 - f x
, 2 - f(f x)
и т. Д.где цифра - сколько раз f
вызывается на x
.Я написал программу на Схеме, основанную на предыдущих определениях нуля и add-1, для итеративного вычисления Церковного Числа числа.Код будет помещен в конце поста.Я пытаюсь запустить эту функцию на номер 7, и я получаю скрытую ошибку Error: <: number required, but got #("halt") [church-numeral, (anon), (anon), (anon), <]
.Единственное, что сравнивает <
, это числа, и я нигде не могу найти в Интернете ничего о #("halt")
, кроме поста о том, что ошибка лингвистически неверна.Что означает эта ошибка и как ее исправить?
Код:
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
(define one (lambda (f) (f (f x))))
(define (add m n)
(lambda (f) (lambda (x) ((m f) ((n f) x)))))
(define (church-numeral x)
(define (iter result x count)
(if (< count x)
(iter (add-1 result x (+ 1 count)))
count))
(iter zero x 0))
(church-numeral 7)