如何确定程序的数据类型?

时间:2016-07-08 19:31:23

标签: function types functional-programming miranda

我正在努力学习考试,我觉得讲座幻灯片让我感到困惑。

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

这是一个令我困惑的例子。他们希望我找到程序类型p2:

p2 x y z = x y!z

p2的数据类型是:

(*->[**])->*->num->**
但是,我不明白他们是如何得出这个结果的。是吗:

  • 元组中代表输入x?
  • 的第一颗星
  • 元组中代表输入y?
  • 的第二个双星列表
  • 代表某事的第三颗星?
  • num表示z?
  • 代表该计划输出的最后一颗二星?

我感谢任何建议!

1 个答案:

答案 0 :(得分:0)

* -> [**]类型为x*类型为ynum类型为z和{{1}结果的类型。

**是一个函数的类型,它接受foo -> bar并返回foo,而bar[baz]的列表。 baz*(以及任何其他数量的** s)代表任意类型(限制条件是,如果相同数量的* s出现多次类型,每次都代表相同的类型。

所以*是一个函数,它接受任意类型的值并产生另一个任意类型的列表; xy的参数类型的值; xz类型的值;结果是值num的结果类型。