Подтвердить что ты не робот

В чем разница между ключевыми словами `fun` и` function`?

Иногда я вижу код типа

let (alt : recognizer -> recognizer -> recognizer) =
  fun a b p -> union  (a p) (b p)

Или как:

let hd = function
    Cons(x,xf) -> x
  | Nil -> raise Empty

В чем разница между fun и function?

4b9b3361

Ответ 1

Семантика для этого такая же, как в F # (вероятно, потому, что F # основана на OCaml):

  • function позволяет использовать сопоставление шаблонов (т.е. |), но, следовательно, ему может быть передан только один аргумент.

    function p_1 -> exp_1 | … | p_n -> exp_n
    

    эквивалентно

    fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
    
  • fun не позволяет сопоставлять шаблоны, но может быть передано несколько аргументов, например.

    fun x y -> x + y
    

При использовании любой из двух форм fun обычно предпочтительнее из-за его компактности.

См. также Документация OCaml для функций.

Ответ 2

Как я об этом думаю

function patterns

является сокращением для

(fun x -> match x with patterns)

где "шаблоны", например,

| Some(x) -> yadda | None -> blah

fun args -> expr

заключается в том, как вы определяете lambda.)

Ответ 3

Russ Cam верен в своем ответе.

Вот публикация в списке OCaml о нем

http://caml.inria.fr/pub/ml-archives/ocaml-beginners/2003/11/b8036b7a0c1d082111d7a83c8f6dbfbb.en.html

function допускает только один аргумент, но допускает сопоставление шаблонов, а fun - более общий и гибкий способ определения функции.

Я обычно использую удовольствие, если нет веской причины использовать функцию.

Вы можете видеть это в коде, который вы отправили, где объявление fun принимает 3 аргумента, а объявление function выполняет сопоставление шаблонов на нем.

Ответ 4

fun x1 ... xn -> e

- это сокращение от

function x1 -> ... -> function xn -> e