haskell - Haskell 中的控制语句?

标签 haskell conditional guard if-statement

我刚刚开始使用 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/

相关文章:

haskell - 我应该如何从列表中输出计算值?

haskell - 使用模板 Haskell 时键入同义词 "not in scope"

haskell - 关于 Haskell 类型类(Num vs Read)

excel - 带硬停止的条件格式颜色渐变

C++ 条件运算符性能

c++ - C/C++ - 条件头文件包含不起作用

ruby-on-rails - Spork 不会重新加载代码

c# - Haskell 和 LINQ 之间有什么联系吗?

Haskell 中的函数守卫和 'where' 语法

Swift Guard else 调用具有 NULL 值的字典键