0

我正在尝试定义一个采用整数并以 Church 数字返回其表示的过程。任何人都可以帮我弄清楚我犯的错误吗?以下代码是我迄今为止能够做到的。

(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

它似乎在期待一个数字?但给出了一个程序。我认为哪个符合程序的意图?感谢您对新手的帮助和评论。

4

1 回答 1

2

to 的参数n->ch应该是一个数字,而不是一个过程:

(define (n->cn n)
  (if (= n 0)
      zero
      (succ (n->cn (- n 1))))) 
于 2021-02-26T01:29:55.250 回答