0

我正在努力准备考试,我觉得讲座幻灯片让我有点困惑。

我们的一个测试问题可能是“程序名称的类型是什么”,但我很难理解这个概念。我了解什么是数据类型,但您是在回答输入的数据类型,并用箭头跟踪程序吗?

这是一个让我感到困惑的例子。他们要我找到程序 p2 的类型:

p2 x y z = x y!z

p2 的数据类型是:

(*->[**])->*->num->**

不过,我不明白他们是如何得出这个结果的。是吗:

  • 元组中的第一个星代表输入 x?
  • 表示输入 y 的元组中的第二个双星列表?
  • 第三颗星代表……什么?
  • 代表 z 的数字?
  • 最后两颗星代表程序的输出?

我很感激任何建议!

4

1 回答 1

0

* -> [**]是的类型x*是的类型ynum的类型z**结果的类型。

foo -> bar是接受 afoo并返回 a的函数的类型,bar并且[baz]bazs 的列表。*and **(以及任何其他数量的*s)代表任意类型(有限制,如果相同数量的*s 在一个类型中出现多次,则每次都代表相同的类型。

x接受任意类型的值并生成另一个任意类型的列表的函数也是如此。yx的参数类型的值;z是类型的值num;并且结果是x's 结果类型的值。

于 2016-07-08T19:42:36.963 回答