Чем отличаются эти два определения функций в OCaml? - PullRequest
2 голосов
/ 02 января 2012

Я видел некоторую реализацию следующим образом:

let rec fact =
  fun n ->
    if n <= 0 then 1 else n * fact (n - 1)

Другая реализация:

let rec fact n =
  if n <= 0 then 1 else n * fact (n - 1)

Может кто-нибудь сказать мне, есть ли разница между этими двумя стилями?

Ответы [ 2 ]

6 голосов
/ 02 января 2012

Эти определения эквивалентны. Обозначение

let rec f a b c = <expr>

- это удобный способ записи (синтаксический сахар для):

let rec f = fun a b c -> <expr>

Это описано в разделе 6.7.1 руководства OCaml под заголовком Локальные определения .

5 голосов
/ 02 января 2012

Нет никакой разницы, кроме синтаксического сахара.Вторая форма определяется как эквивалентная первой.

Вторая форма обычно предпочтительнее по стилистическим соображениям: в строке let вы знаете, что определяете функцию.В первом вы должны прочитать fun, чтобы понять это.

...