11.3.2计算策略的比较
来源:互联网 发布:linux c需要学多久 编辑:程序博客网 时间:2024/05/16 09:44
11.3.2计算策略的比较
[
evaluation、computation、calculation,在第二章,是后两个计算放在一起,让人搞不清准确的含义;现在倒好,出现了三个计算,又该如何体会呢?
据说,从左到右,是从粗略到精确的过度,即,前面的强调估算,后面的强调演算。
能体会出来吗?语言不同,表达真的不同。
因此,计算机就选了一个中间值,既不强调粗,也不强调精;恰恰表明,既强调粗,也强调精。
前两天,听电视里的一个新闻讲,俄罗斯人(好像是)能分辨出雪的 1000 种白色。
听到这里,就让我想到中国人,不太喜欢精确,不是有一句话,叫什么“天下乌鸦一般黑”,根本不分各黑的区别。
但是,这样说,又有点以偏概全。看看古书上关于煮饭的锅、喝酒的杯、装菜的盘的字,我们能认识几个。
]
我们演示计算策略的不同,可以使用第二章描述的计算技术,展示程序一步一步的运行步骤,这样,就可以清楚地看出延迟计算和提前计算之间的差异。清单11.14 是一个表达式的计算,使用了两个函数:PlusTen(a) 返回a + 10,TimesTwo(a) 返回a*2。
[
这里的清单编号出了问题,从 11.14 一下变到 11.17。
好在这个不影响意思的表达。因此,译文也就译错如错吧。
]
清单11.14 延迟计算与提前计算
清单 11.17 延迟计算
清单 11.17 提前计算
PlusTen(TimesTwo(4))
// Start calculating PlusTen:
TimesTwo(4) + 10 [1]
// Calculate TimesTwo, because
// we need its result now:
8 + 10 [2]
// Calculate the result:
18
PlusTen(TimesTwo(4))
// To get values of all arguments,
// calculate result of TimesTwo:
PlusTen(8) [3]
// Evaluate PlusTen next:
8 + 10 [4]
// Calculate the result:
18
延迟计算策略首先计算PlusTen,而不先计算参数值。下一步,需要把10 与参数值相加[1],而参数值还没有计算。由于参数值是需要进一步处理,才执行对TimesTwo 的调用[2],这样,我们就得到了最终结果。
提前计算战略首先计算参数值,因此,在第一步就计算了TimesTwo(4),得到8 [3]。PlusTen 函数的所有参数值,现在就已经都计算了,因此,可以继续计算这个函数[4],计算出结果。
到目前为止,我们只看到使用延迟计算策略的一个原因,而这似乎已经很有用了。如果它只存在于Haskell 中,那为什么我们还把它提出来呢?因为在F# 和C# 3.0 中,可以实现类似的效果。
- 11.3.2计算策略的比较
- 11.3.1 不同的计算策略
- 11.3.1.2 Haskell 的延迟计算策略
- 多种CSMA策略的比较
- Integer的计算比较
- 比较策略
- java日期的比较 计算
- C 计算时间差的比较。。
- 演化策略与遗传算法的比较
- Hibernate和Jive缓存策略的比较
- Hibernate和Jive缓存策略的比较
- 几种主键生成策略的比较
- 几种主键生成策略的比较
- Hibernate和Jive缓存策略的比较
- 静态工厂与策略模式的比较
- Google背后的分布式计算架构策略
- Google背后的分布式计算架构策略
- GPU计算的发展策略分析
- onWindowFocusChanged重要作用及Activity的生命周期
- 解锁、唤醒屏幕
- 柔性管理法则与柔性管理案例
- Java中获取文件大小的正确方法
- navcat for oracle create namespace user
- 11.3.2计算策略的比较
- ACE反应器框架引用计数策略的使用
- POJ 2299-Ultra-QuickSort(归并排序求相邻元素的交换次数)
- 基于xmpp openfire smack开发之smack类库介绍和使用[2]
- Log4J的配置
- GitHub上最火的Android开源项目(二)
- Multicore Navigator (CPPI):Notify end of QM interrupt
- 锤子如何连接MacOS系统调试
- python检索目录下所有文件中包含指定字符串的文件