Я не думаю, что есть четкий ответ на этот вопрос.Во-первых, очевидный случай сопоставления с образцом - это когда вам нужно уничтожить, например:
let rec sum = function
| [] -> 0
| head :: tail -> head + sum tail;;
Другой очевидный случай - когда вы определяете рекурсивную функцию, сопоставление с образцом делает условие ребра более четким, например:
let rec factorial = function
| 0 -> 1
| n -> n * factorial(n - 1);;
вместо:
let rec factorial = function n ->
if n = 0 then
1
else
n * factorial(n-1);;
Это может быть не лучшим примером, просто используйте свое воображение, чтобы выяснить более сложные условия края!; -)
В терминах обычных (скажем, C-подобных) языков я мог бы сказать, что вы должны использовать сопоставление с образцом вместо switch
/ case
и if
вместо троичного оператора.Для всего остального это своего рода серая зона, но сопоставление с образцом обычно предпочитается в семействе языков ML.