- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Here是以下内存功能的完整可运行代码:
memo f = g
where
fz = f Z
fs = memo (f . S)
g Z = fz
g (S n) = fs n
-- It is a BAD BUG to inline 'fs' inside g
-- and that happened in 6.4.1, resulting in exponential behaviour
-- memo f = g (f Z) (memo (f . S))
-- = g (f Z) (g (f (S Z)) (memo (f . S . S)))
-- = g (f Z) (g (f (S Z)) (g (f (S (S Z))) (memo (f . S . S . S))))
fib' :: Nat -> Integer
fib' = memo fib
where
fib Z = 0
fib (S Z) = 1
fib (S (S n)) = fib' (S n) + fib' n
最佳答案
这很难解释。我将从一个更简单的例子开始。
必须牢记两者之间的区别
\x -> let fz = f 0 in if x==0 then fz else f x
let fz = f 0 in \x -> if x==0 then fz else f x
f 0
当使用参数
0
调用时.相反,后者将计算
f 0
只有第一次使用参数
0
调用它-- 发生这种情况时,
fz
被评估,并将结果永久存储在那里,以便下次可以再次使用它
fz
是需要的。
f 0 + f 0
let fz = f 0 in fz + fz
f 0
只有一次,自从第二次
fz
将已经被评估。
f
的轻量级内存。 , 仅存储
f 0
如下:
g = let fz = f 0 in \x -> if x==0 then fz else f x
g = \x -> if x==0 then fz else f x
where
fz = f 0
\x ->
=
的左侧,否则我们会丢失内存!
g = g'
where
fz = f 0
g' = \x -> if x==0 then fz else f x
\x ->
在左边没有任何问题。
g = g'
where
fz = f 0
g' x = if x==0 then fz else f x
g = g'
where
fz = f 0
g' 0 = fz
g' x = f x
f 0
而不是每个
f n
.确实,计算
g 4
两次将导致
f 4
计算两次。
g
处理任何功能
f
而不是固定的:
g f = g' -- f is now a parameter
where
fz = f 0
g' 0 = fz
g' x = f x
-- for any f, x
g f x = f x
-- hence, in particular
g (f . succ) (pred x) = (f . succ) (pred x) = f (succ (pred x)) = f x
g (f . succ) (pred x)
是一种复杂的书写方式
f x
.像往常一样,
g
将函数内存为零。然而这是
(f . succ) 0 = f 1
.通过这种方式,我们在
1
获得了 memoization。 , 反而!
g f = g' -- f is now a parameter
where
fz = f 0
g' 0 = fz
g' x = g (f . succ) (pred x)
0
调用, 这使用
fz
存储
f 0
,记下来。
1
调用,这将调用
g (f . succ)
这将分配另一个
fz
对于
1
案子。
fz
不会持续很长时间,因为它每次都会重新分配
g' x
被称为,否定内存。
g (f . succ)
最多只计算一次。
g f = g' -- f is now a parameter
where
fz = f 0
fs = g (f . succ)
g' 0 = fz
g' x = fs (pred x)
fs
最多评估一次,将导致分配另一个
fz
对于
1
案子。这个
fz
现在不会消失。
f n
被内存。
关于haskell - GHC 测试套件中的这个简短的内存功能是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622076/
void main(){ char c; unsigned char uc; unsigned short us1, us2; short s1, s2; c
我要删除 wordpress html 格式在 woocommerce 产品简短描述中。添加 电话 到处标记。我知道如何在 wp 帖子和页面中做到这一点 remove_filter( 'the_exc
我通常会打开一个命令的联机帮助页,该命令已经知道我正在搜索的选项并阅读其描述。有时只需搜索该选项即可立即生效,有时该选项在其他地方被引用,有时该选项仅作为子字符串出现在前面的文本中。 作为一个具体的例
假设我们有一个编号的圆圈。我们想从 A 点到 B 点,但不知道应该向左还是向右。你会如何使用数字来计算你应该朝哪个方向前进? 示例: 我们目前在 1。我们想继续 5。我可以直观地看到 5 更近,所以我
我正在使用以下内容将产品名称和价格添加到悬停框。 在 functions.php 中 // Alter produt loop individual products add_action( 'woo
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个for循环 for ($x=1; $x<=5; $x++){ ($x == 3)? continue : true; //some code here } 现在执行时出现错误
我刚刚开始我的第一个 Java Swing 项目(之前主要做基于 Web 的应用程序),并尝试了解如何构建一个适当的架构,并在 MVC 组件之间分离关注点。 我发现的几乎所有文档都非常深入地介绍了每个
我是一名优秀的程序员,十分优秀!