Haskell多语句效率

Arc*_*ler 4 performance haskell case

这对于检查Haskell中的多个语句有效吗?或者这有更好的方法吗?

case ((x > -10) && (x < 20),x /= 9,(x `mod` 2) == 0,x) of 
    (False,_,_,_) -> error "Not in range"
    (_,False,_,_) -> error "Must not be 9"
    (_,_,False,_) -> error "Must be even"
    (True,True,True,10) -> stuff ()
    (True,True,True,20) -> stuff ()
    _ -> error "Error Message"
Run Code Online (Sandbox Code Playgroud)

pig*_*ker 7

有时很难想出这个问题的小例子,这些例子看起来并不人为,但它们确实发生了.有时你需要一堆计算结果来弄清楚如何将一个函数拆分成它的情况.

所以,是的,我经常发现case在一组事物上使用它是最干净的 - 我可能会关心构建复杂的决策过程.我相信懒惰来计算解析调用哪个分支所需的最小值.

值得尝试通过布尔警卫(甚至模式保护)来表达您的测试,但有时候没有什么可以在大元组中列出您需要的计算值,然后为每个有趣的环境组合写一行.