¿Cuál es la diferencia entre las palabras clave `diversión` y `función`?


A veces veo código como

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

O como:

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

¿Cuál es la diferencia entre fun y function?

 32
Author: John Källén, 2009-10-22

3 answers

La semántica para esto es la misma que en F# (probablemente porque F# se basa en OCaml):

  • function permite el uso de la coincidencia de patrones (es decir, |), pero en consecuencia solo se puede pasar un argumento.

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

    Es equivalente a

    fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
    
  • fun no permite la coincidencia de patrones, pero se pueden pasar varios argumentos, por ejemplo

    fun x y -> x + y
    

Cuando se puede usar cualquiera de las dos formas, fun generalmente se prefiere debido a su compactibilidad.

Véase también Documentación OCaml sobre Funciones.

 36
Author: Russ Cam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-26 14:37:02

La forma en que lo pienso

function patterns

Es la abreviatura de

(fun x -> match x with patterns)

Donde 'patrones' es, por ejemplo,

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

(Y

fun args -> expr

Es como se define una lambda.)

 20
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-22 01:47:52

Russ Cam tiene razón en su respuesta.

Aquí hay una publicación en la lista OCaml hablando de ello

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

function solo permite un argumento pero permite la coincidencia de patrones, mientras que fun es la forma más general y flexible de definir una función.

Generalmente uso diversión a menos que haya una buena razón para usar la función.

Puedes ver esto en el código usted publicó donde la declaración fun toma 3 argumentos y la declaración function hace coincidencia de patrones en su entrada

 8
Author: chollida,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-22 00:12:30