Синтаксис объявления функции в OCaml - PullRequest
7 голосов
/ 23 июля 2011

Я хотел бы определить функцию следующим образом:

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

Можно ли сделать сигнатуру короче, не делая их кортежем?Поскольку я все еще хочу, чтобы у f было 4 аргумента.

Большое спасибо.

Edit1: Я просто думаю, что бесполезно повторять int 4 разаи изобразить что-то вроде let f (a, b, c, d: int): int, что на самом деле на данный момент не разрешено.

Ответы [ 2 ]

13 голосов
/ 23 июля 2011

Попробуйте этот синтаксис:

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

Это не намного короче, но если у вас их много, вы можете определить type arith4 = int -> int -> int -> int -> int и использовать это имя в качестве аннотации типа для g.

1 голос
/ 23 июля 2011

Мой 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;;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...