定义ocaml函数的方法

时间:2019-09-13 16:14:33

标签: ocaml

我试图定义哪种类型的函数

(test, test) -> test

所以我写下了这样的代码:

let test_func: (test, test) -> test = fun ...

但是它给了我语法错误,所以我将其更改为

let test_func: (test, test) test = fun ...

而且它不给我语法错误消息。

但是我不知道为什么第一个给我语法错误。

(我也尝试过这种形式。let test_func (test, test): test这是定义函数的更好方法吗?)

1 个答案:

答案 0 :(得分:1)

(test, test)不是有效的类型。如果要描述元组类型,则正确的语法是test * test。我怀疑您实际上是想用两个参数来描述一个函数,但是它们将是test -> test -> test,因为OCaml是一种咖喱语言。

(test, test) test在语法上是有效的,因为它描述了具有两个参数的参数化类型。

let test_func (test, test): test并不指定整个函数类型,而仅指定返回类型。 (test, test)在这里描述了一个元组参数,其中项分别绑定到testtest。我猜您实际上是在使用不同的名称,否则它将无法编译。

您可以像下面这样分别指定每个参数的类型和返回类型:

let test_func (a: test) (b: test): test = ...