Pergunta

Às vezes eu vejo um código como

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

Ou assim:

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

O que é a diferença entre fun e function?

Foi útil?

Solução

A semântica para isso é o mesmo que no F # (provavelmente porque F # é baseado em OCaml):

  • function permite o uso de correspondência de padrão (ou seja |), mas, consequentemente, ele pode ser passado apenas um argumento.

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

    é equivalente a

    fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
    
  • fun não permite a correspondência de padrão, mas pode ser passado vários argumentos, por exemplo.

    fun x y -> x + y
    

Quando qualquer uma das duas formas podem ser utilizados, fun é geralmente preferido devido à sua compacidade.

Veja também OCaml documentação sobre funções .

Outras dicas

A maneira que eu penso sobre isso

function patterns

é um atalho para

(fun x -> match x with patterns)

onde 'padrões' é por exemplo.

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

(E

fun args -> expr

é como você define um lambda.)

Russ Cam está correto em sua resposta.

Aqui está uma postagem na lista OCaml falar sobre isso

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

function só permite um argumento, mas permite a correspondência de padrão, enquanto fun é a maneira mais geral e flexível para definir uma função.

Eu geralmente uso diversão a menos que haja uma boa razão para função de uso.

Você pode ver isso no código que você postou em que a declaração fun leva 3 argumentos e a declaração function faz correspondência de padrão, por si de entrada

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top