Когда я запускаю процедуру для вычисления церковной цифры целого числа, почему я получаю ошибку # ("остановка")? - PullRequest
0 голосов
/ 06 марта 2019

Алонзо Черч использовал лямбда-исчисление для создания системы представления чисел с помощью процедур.

Например: 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) 

1 Ответ

1 голос
/ 06 марта 2019

Похоже, (iter (add-1 result x (+ 1 count))) должно быть (iter (add-1 result) x (+ 1 count)).

...