我刚刚开始使用 Haskell,但是从我发现的所有在线教程中,我似乎无法找到是否有一种可接受的方式来执行条件控制语句。我见过 if-else、守卫和模式匹配,但它们似乎都完成了同样的事情。是否有一种普遍接受/更快/更有效的方式比其他方式?
最佳答案
Is there one generally accepted/faster/more efficient way than the rest?
守卫是(相当复杂的)语法糖,用于 if-then-else 以下模式匹配。 If-then-else 是
case
的语法糖超过 Bool
.所以这些东西大多同样有效。但这里有一个观察:使用 bool 表达式通常很容易低效地执行模式匹配的高效操作。开始 Haskell 程序员最喜欢的例子是编写
length xs == 0
成本与
xs
的长度成正比, 在哪里case xs of { [] -> True; _:_ -> False }
花费恒定的时间。
观察正在发生的事情的更精确的方法是(没有像 View 模式这样的花哨的扩展),模式匹配的最坏情况成本与出现在左侧的构造函数的数量成正比——你不能写一个既昂贵又小规模的模式匹配。相比之下, bool 表达式的大小无法告诉您评估它的成本。在这个意义上,并且仅在这个意义上,模式匹配比 if-then-else 或 guards 更便宜。
对于初学者来说,一个很好的启发式方法是 尽可能使用模式匹配。 随着您获得更多经验,您可以改进您的方法。
关于haskell - Haskell 中的控制语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784313/