OCaml中函数声明的语法

时间:2011-07-23 16:42:31

标签: ocaml

我想定义一个函数如下:

let f (a: int) (b: int) (c: int) (d: int): int =
  ...

是否可以在不将其作为元组的情况下缩短签名?因为我仍然希望f有4个参数。

非常感谢。

编辑1:我认为重复int 4次是没用的,并且像let f (a, b, c, d: int): int这样的内容实际上是不允许的。

2 个答案:

答案 0 :(得分:13)

试试这个语法:

let g: int -> int -> int -> int -> int =
  fun a b c d -> 
     assert false

它不会短得多,但如果你有很多这些,你可以定义type arith4 = int -> int -> int -> int -> int并使用该名称作为g的类型注释。

答案 1 :(得分:1)

我的OCaml很生疏,但我相信你可以通过声明自己的类型并在函数体中解压缩来实现。

type four = int*int*int*int

let myfunction (t:four) = 
   let a, b, c, d = t in 
      a + b + c + d;

你也可以这样做:

let sum4 ((a, b, c, d):int*int*int*int) = 
   a + b + c + d;;