¿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
?
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 ejemplofun 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.
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.)
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
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
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