【发布时间】:2013-08-12 23:23:34
【问题描述】:
我有以下类型:
data Tree a = Empty |
Branch { key :: a,
balance :: Int8,
left :: Tree a,
right :: Tree a,
up :: Bool --used internally to stop updating balance
}
deriving (Eq)
和一个符合以下模式的函数:
roll (Branch y (-2) l (Branch ry 1 (Branch rly 0 Empty Empty _) rr _) _) = ...
尽管(Branch rly 0 Empty Empty _) 内的Empty Empty 是唯一可能的情况,但我想知道 - 将把表格概括为:
roll (Branch y 2 (Branch ly (-1) ll (Branch lry 0 lrl lrr _) _) r _) = ...
工作速度更快(甚至可以忽略不计),因为运行时不需要将 lrl 和 lrr 与 Empty 匹配?
【问题讨论】:
-
其他人已经说过“是的,它可能;基准测试只是知道的方法”。然而,在更深入的情况下,它不必评估这些 thunk 来查看它们是否为 Empty,这可能会节省大量计算,从而大大加快速度。这种情况似乎不太可能,但每次匹配模式时它可能会节省一些周期,这取决于用例可能加起来很多
标签: haskell optimization recursion pattern-matching algebraic-data-types