作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模拟,对 type F = A -> B -> C -> D
的函数有很多调用。 , 其中 A
.. D
是具体类型。A
类型的对象有中等生命周期。 (它是 codegolf's ratrace 的基因组。)
最昂贵的计算来自参数 A
.我可以像这样轻松地内存:
f1 :: F
f1 a = let expensive = trace "expensive computation!" $ expensiveComputation a
in \b c -> expensive
expensive
通过部分应用的值:
preProz :: [B -> C -> D]
preProz = [f1 [], f1 [False], f2 []]
preProz <*> [[],[[]]] <*> [1,2]
不会重新计算令我高兴的值。
F
s 将受益于预处理
B
, 也。此预处理独立于
A
,而且,事实上,这样的内存并没有什么好处
f2 a = let expensive = trace "expensive computation!" $ expensiveComputation a
in \b -> let dear = trace "expensive computation!" $ expensiveComputation b
in expensive + dear
dear
被重新计算,甚至是
b
s 相等。
(B -> e) -> A -> e -> C -> D
e
应该记住。
e
的类型在这里有点存在感。
A
对于每个
B
,这同样糟糕,我无法保存
e
s,这是函数私有(private)的。
最佳答案
您需要一个能够同时记录 a
的函数和 b
一起:
f12 a b = ...
in \c -> ...
a
但不是
b
, 你使用
f1 a
当你想记住两者时,你可以使用
f12 a b
.
f1
之间共享一些实现当然会很好。和
f12
.但是,您只能通过使用将预先计算的结果代替原始值的私有(private)函数来做到这一点:
f1 a = privateA (precomputeA a)
f12 a b = privateAB (precomputeA a) (precomputeB b)
privateA a' b = privateAB a' (precomputeB b)
private AB a' b' c = ...
b
的预计算取决于
a
的预计算, 然后:
f1 a = privateA (precomputeA a)
f12 a b = let a' = precomputeA a in privateAB a' (precomputeB a' b)
privateA a' b = privateAB a' (precomputeB a' b)
private AB a' b' c = ...
关于haskell - 独立内存论点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194315/
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: How to use R's ellipsis feature when writing your own func
当我尝试指定我想要 pull 最新版本的 pod 时,根据 Cocoapods official docs ,我将它列在我的 podfile 中,如下所示: pod 'ReactiveCocoa',
我是一名优秀的程序员,十分优秀!