Performance 如何改进有两种情况的haskell代码?
我正在学习Haskell,我觉得我的代码乱七八糟。这是:Performance 如何改进有两种情况的haskell代码?,performance,haskell,Performance,Haskell,我正在学习Haskell,我觉得我的代码乱七八糟。这是: fold (Add (e1) (e2)) = case e11 of N n -> case e22 of N m -> N (n + m); _ -> Add e11 e22 _ -> Add e11 e22 where e11 = fold e1 e22 = fold e2 N和Add是我定义的数据类型。问题是,我不喜
fold (Add (e1) (e2)) = case e11 of N n -> case e22 of N m -> N (n + m); _ -> Add e11 e22
_ -> Add e11 e22
where
e11 = fold e1
e22 = fold e2
N和Add是我定义的数据类型。问题是,我不喜欢我使用两个箱子的方式,所以有没有一种方法可以做到相同但更干净?在我看来,如果你在一对带有两个
折叠的鞋子上进行图案匹配,会简单得多:
fold (Add e1 e2) = case (fold e1, fold e2) of
(N n, N m) -> N (n+m)
(e11, e22) -> Add e11 e22
如果两者的结果都是N…
形式,则对它们求和,否则对结果使用Add
性能应该与原始代码中的性能基本相同。甚至有可能两个版本在优化后生成相同的核心。不知道可以使用元组,我假设可以对n元组执行相同的操作,对吗?