从Scheme表达式返回的数据类型

时间:2012-10-15 21:19:18

标签: scheme

如果你为我解释这个问题,我将非常感激。我一直在思考它已经有一段时间但是无法解决它。我是一名自学者,这是麻省理工学院icampustutor网站的练习。

指出以下每个程序的类型。使用符号“ - >”例如,为了表示“映射到”,过程square具有类型“number-> number”。使用以下术语来描述基本类型的数据:number,boolean,string。

1-(定义(测试条n)(if(bar n)n(测试条(+ n 2))))

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

3-(定义(测试foo bar n)(if(bar n)(+ 1(foo n))(test foo bar(+ n 3))))

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

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

  1. (n-> bn) - > n

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

  2. (n-> n n-> b n) - > B'/ p>

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

  4. 同样对于4,5,6,除了表达式的结果当然是lambda本身,并且不受任何约束。

    1. (n b) - > Ñ

    2. n - > (正将N)

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

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

      取两个数字和一个带有两个数字的lambda并返回一个布尔值