我在为全球健康中心的低水平体体体体能优化而努力。 我的方案包含一些从事计算数字的假体。 实际数据在其他数据结构中作了总结,该方案被细分为“流动控制功能”和“计算功能”,因此有些数据结构领域最终被内部内部读。 我希望格奥尔卡将那些读物的人移出内.。 这里是该守则的简化版本,以显示其进展。
data D = D !Double !C
data C = C Double
-- This function is called in every loop iteration.
-- Parameter c is loop-invariant.
exampleLoopBody i a c =
case c of C b -> a + b * fromIntegral i
-- The body of this function is a counted loop that should be optimized
foo x =
case x
of D acc0 c ->
let loop i acc =
if i > 100
then acc
else loop (i+1) (exampleLoopBody i acc c)
in loop 0 acc0
每一处孔径流体评价C b c条,但这种计算是多余的,因为<条码>c是 lo。 我可以把多余的个案表述放在外面,使GHC解除危险:
foo x =
case x
of D acc0 c ->
case c -- This case statement inserted for optimization purposes
of C b -> b `seq` -- It will read b outside of the loop
let loop i acc =
if i > 100
then acc
else loop (i+1) (exampleLoopBody i acc c)
in loop 0 acc0
网上编辑<代码>exampleLoopBody。 其后,内案陈述是多余的,删除:
foo x =
case x
of D acc0 c ->
case c
of C b -> b `seq`
let loop i acc =
if i > 100
then acc
else loop (i+1) (acc + b * fromIntegral i) -- The inlined case expression disappears
in loop 0 acc0
<代码>seq 的目的是确保案件表述不成死亡代码。 www.un.org/Depts/DGACM/index_french.htm http://code>b。 GHC指出,由于对<代码>b进行了计算,因此在机体内重新使用这一数值是有益的。
现在的问题是: 我确实希望所有相关的数据领域都严格。 如果在数据定义中加上严格的说明,就如此,
data C = C !Double
然后seq
and case c of C b
只要涉及GHC,就没有效力。 GHC删除了这些内容,我这样做:
foo x =
case x
of D acc0 c ->
let loop i acc =
if i > 100
then acc
else loop (i+1) (case c of C b -> acc + b * fromIntegral i) -- Evaluate the case in every iteration
in loop 0 acc0
这部法典在每部电传中都评价了C bcase c,这正是我试图避免的。
如果我可以依靠<代码>seq,我不知道如何将<条码>b<>/条码>强加于人,在体外计算。 我是否可在此案中使用某种骗子?