【发布时间】:2014-09-19 23:25:46
【问题描述】:
我正在学习 Haskell,但我并不总是清楚何时使用匹配器以及何时使用守卫。对于某些场景,似乎可以使用匹配器和守卫来实现基本相同的目的。是否有一些规则或启发式方法可以更好地使用匹配而不是守卫,反之亦然?一个比另一个性能更好吗?
为了说明我的意思,下面是我编造的几个愚蠢的例子,它们似乎是等价的,但一个版本使用匹配器,另一个使用守卫:
listcheck :: [a] -> String
listcheck [] = "List is null :-("
listcheck a = "List is NOT null!!"
listcheck' a
| null a = "List is null :-("
| otherwise = "List is NOT null!!"
和
luckyseven :: Int -> String
luckyseven 7 = "SO LUCKY!"
luckyseven b = "Not so lucky :-/"
luckyseven' c
| c == 7 = "SO LUCKY!"
luckyseven' c = "Not so lucky :-/"
谢谢!
【问题讨论】:
-
我会尽可能使用模式匹配,必要时使用守卫。
标签: haskell functional-programming