我有以下类型:
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 _) _) = ...
尽管Empty Empty
内(Branch rly 0 Empty Empty _)
是唯一可能的情况,但我想知道 - 会将表格概括为:
roll (Branch y 2 (Branch ly (-1) ll (Branch lry 0 lrl lrr _) _) r _) = ...
工作得更快(甚至可以忽略不计),因为运行时不需要将lrl
和lrr
与Empty
匹配?
答案 0 :(得分:2)
它可能产生非常小的速度提升 - 您必须正确地对其进行基准测试才能确定。 (如果您不打算查看lrl
或lrr
,则不妨使用_
。)
我个人的建议是在那里留下明确的Empty
模式。你说“没有其他可能性”,但在代码中记录这一点对于你实际上是错误的不太可能的事件变得非常有帮助。 ; - )
(它也可能会影响程序的整体严格性/懒惰性 - 但这是一个完整的其他讨论......)
答案 1 :(得分:0)
是的,它会更快。如果它值得,只有基准测试可以说明。