0

我有以下类型:

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和?lrrEmpty

4

2 回答 2

2

可能会产生非常小的速度提升 - 您必须正确地对其进行基准测试才能确定。(如果你不打算看lrlor lrr,你不妨_改用。)

我个人的建议是将显式Empty模式保留在那里。您“没有其他可能性”,但是在代码中记录这一点非常有用,以防万一您实际上弄错了。;-)

(它也可能会影响您程序的整体严格性/惰性 - 但这是另一个完整的讨论......)

于 2013-08-11T16:13:01.877 回答
0

是的,它会更快。如果它值得,只有基准测试才能告诉我们。

于 2013-08-11T22:23:45.220 回答