No creo que haya una respuesta clara a esa pregunta. En primer lugar, el caso evidente de coincidencia de patrones es cuando se necesita destructing, por ejemplo:
let rec sum = function
| [] -> 0
| head :: tail -> head + sum tail;;
Otro caso es obvia cuando se está definiendo una función recursiva, coincidencia de patrones que la condición de borde más claro, por ejemplo:
let rec factorial = function
| 0 -> 1
| n -> n * factorial(n - 1);;
en lugar de:
let rec factorial = function n ->
if n = 0 then
1
else
n * factorial(n-1);;
Esto puede no ser un gran ejemplo, sólo tiene que utilizar su imaginación para idear condiciones de borde más complejas! ;-)
En términos de (digamos) C ¿Te gusta lenguajes regulares, podría decir que se debe utilizar en lugar de coincidencia de patrones switch
/case
y if
en lugar del operador ternario. Para todo lo demás, es una especie de zona gris, pero en general se prefiere la coincidencia de patrones en la familia de idiomas ML.
La respuesta aceptada a continuación parece buena en la mayoría de los casos. Sin embargo, al igual que en la mayoría (¿todos?) De los lenguajes de programación, rara vez es una buena idea decir algo similar a 'if condition then true else false'; en su lugar, simplemente puede usar 'condición'. En este caso, puede decir 'let foo a = (a = [])' y evitar ambas coincidencias de patrones y if. –