所以,我对 OCaml 完全陌生,并且在实现我的第一个功能方面进展缓慢。我无法理解的一件事是何时使用模式匹配功能,例如
let foo =
[] -> true
| _ -> false;;
vs 使用 if else 结构,如
let foo a =
if a = [] then true else false;;
我应该什么时候使用?
最佳答案
我认为这个问题没有明确的答案。首先,模式匹配的明显情况是当您需要破坏时,例如:
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 语言家族中是首选。
关于functional-programming - OCaml:模式匹配与 If/else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536633/