functional-programming - OCaml:模式匹配与 If/else 语句

标签 functional-programming if-statement pattern-matching ocaml

所以,我对 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/caseif代替三元运算符。对于其他一切,它是一种灰色地带,但模式匹配通常在 ML 语言家族中是首选。

关于functional-programming - OCaml:模式匹配与 If/else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536633/

相关文章:

c# - .NET 中的不可变集

haskell - lambda 内部的模式匹配

haskell - 在 Haskell 中使用随机数显示整数算术时出现问题

performance - 推理 Haskell 的性能

javascript - 在事件触发时将变量传递给闭包

javascript - 如何检测类中的哪个元素具有某种样式

c - 简单的 "Random Number Guessing Game"/IF ELSE 在 C 中不起作用

if-statement - Handlebars #if不在#forEach内工作

parsing - 如何构造匹配表达式

enums - 使用模式匹配参数的闭包组合 Option<Enum>