这些表达的类型是什么?

时间:2016-10-24 15:15:27

标签: types scheme expression

您能帮我指出以下表达式的类型吗?

如果表达式定义了过程,则指明如此定义的过程的类型。对于未知类型,可以使用A,B,C等

我做不到,所以我希望有人可以解释我。

1)(lambda (p) (+ 1 (p 3)))

2)(lambda (x y comp) (if (comp x y) (+ x 1) (+ y 1)))

1 个答案:

答案 0 :(得分:0)

看第一个例子: (lambda (p) (+ 1 (p 3)))

我们知道plus的类型为+:Number Number - >数。从这里,我们可以推断出一些事情。如果p取3,一个数字,我们可以确定它的输入类型是数字。到目前为止,我们知道p:Number - > ????。接下来我们可以看看(p 3)的值在哪里。此数据立即用于+。我们已经知道plus的类型是+:Number Number - >数。然后我们知道(p 3)的输出也必须是数字。因此我们知道p:Number - >数。这意味着整个lambda具有类型(Number - > Number) - >号。

在第二个例子中, (lambda (x y comp) (if (comp x y) (+ x 1) (+ y 1))) 我们知道x和y必须是Number类型,因为它们是由plus使用的。从这里,我们也知道comp的输出必须是一个布尔值,因为它在if表达式中使用(在大多数情况下,如果不是所有的Schemes中,任何非false值在if语句中都被认为是真的,所以有可能是comp可以返回任何类型)。最后,我们知道comp同时包含x和y,它们都是数字,所以comp的类型必须是Number Number - >布尔。这使得lambda号码的类型(Number Number - > Boolean) - >号。