1

如果您为我解释这个问题,我将不胜感激。我一直在思考它很长一段时间,但无法弄清楚。我是一名自学者,这是来自 MIT's icampustutor 网站的练习。

指出以下每个过程的类型。使用符号“->”表示“映射到”,例如,过程 square 的类型为“number->number”。使用以下术语来描述数据的原始类型:数字、布尔值、字符串。

1- (define (test bar n) (if (bar n) n (test bar (+ n 2))))

2- (define (test foo bar n) (if (bar n) #t (test foo bar (+ n (foo n)))))

3- (define (test foo bar n) (if (bar n) (+ 1 (foo n)) (test foo bar (+ n 3))))

4- (lambda (ab) (+ a (如果 b 1 0)))

5- (λ (x) (λ (y) (+ xy)))

6- (lambda (xy comp) (if (comp xy) (+ x 1) (+ y 1)))

谢谢你的帮助。

4

1 回答 1

1

您的前三个表达式将 lambdas 绑定到符号“test”。问题是要求您从函数的使用方式以及该函数的结果如何使用来推断 foo 和 bar 的类型。这就是我从阅读该代码中得到的:

  1. (n->bn)->n

    也就是说test有两个参数,第一个是lambda,它接受一个数字并返回一个布尔值,第二个是一个数字,函数的结果是一个数字

  2. (n->n n->bn) -> b

  3. (n->n n->bn) -> n

同样对于 4,5,6,当然,除了表达式的结果是 lambda 本身,并且没有绑定到任何东西。

  1. (nb) -> n

  2. n-> (n->n)

    也就是说,这个lamba的结果是另一个lambda,它接受一个数字并返回一个数字。

  3. (nn (nn)->b) -> n

    取两个数字和一个 lambda,它取两个数字并返回一个布尔值

于 2012-10-15T21:53:49.453 回答