OCaml类型和类型推断

时间:2015-10-01 00:43:55

标签: types ocaml

我在确定OCaml类型时遇到了一些麻烦。为什么以下表达式的类型为:

let f x y z = z (y::x)

'a list->'a->('a list->'b)->'b

z (y::x)是什么意思?我知道y::x意味着将y元素附加到列表x,但z会做什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

首先,请注意y::x 预先,而非追加,元素y列出x

f类型的四个部分可以解释如下:

  • 函数f的第一个参数是x,因此f类型的第一部分是'a list,这与使用{{1}一致} {作为x
  • 定义中的列表
  • f类型的第二部分是f,与列表'a中的前置元素y一致,因为xx 'a listy必须是'a
  • f的第三个参数是z,它必须是一个函数,将'a list作为其第一个参数,给出它在f定义中的用法。因此,f类型的第三部分是('a list -> 'b),其中'bz的返回类型。
  • 最后,f的返回类型与z的返回类型相同,因此f类型的最后一部分是'b'