11.3.1 不同的计算策略

Haskell 是一种纯函数式语言,有一个重要的方面,即,不允许任何副作用。有专门的技术在屏幕上输出,或处理文件系统,但对于程序员来说,它是以一种看起来不像有副作用的方式来实现。在这样的语言中,调整计算排序表达式的顺序是可能的;在Haskell 中,直到需要结果,才计算函数;这不会影响程序的结果,因为,函数没有副作用。

C# 和 F# 的函数都可能有副作用,这是 F# 中的障碍,因此,语言提供多种方式避免,但仍然会在程序中出现。两种语言都需要指定表达式运行的顺序,否则,我们不可能确定哪个副作用先出现,因此,也就不可能进行可靠的编程!

时间: 2024-10-31 23:04:30

11.3.1 不同的计算策略的相关文章

11.3.2计算策略的比较

[ evaluation.computation.calculation,在第二章,是后两个计算放在一起,让人搞不清准确的含义:现在倒好,出现了三个计算,又该如何体会呢? 据说,从左到右,是从粗略到精确的过度,即,前面的强调估算,后面的强调演算. 能体会出来吗?语言不同,表达真的不同. 因此,计算机就选了一个中间值,既不强调粗,也不强调精:恰恰表明,既强调粗,也强调精. 前两天,听电视里的一个新闻讲,俄罗斯人(好像是)能分辨出雪的 1000 种白色. 听到这里,就让我想到中国人,不太喜欢精确,不

11.3.1.2 Haskell 的延迟计算策略

在延迟计算策略(lazy evaluation strategy)中,函数的参数值,在函数调用时不会计算,直到后来用到这个值时才计算.我们回到前面的例子: TestAndCalculate(Calculate(10)); 在这里,Haskell 直接跳转到TestAndCalculate 函数主体.Haskell 会记住参数值的名字叫 num,如果在后面需要 num 值,就会运行 Calculate(10),然后,继续执行,得到 TestCondition的结果.如果这个函数返回true,表示需

加权平均法,移动加权平均法,先进先出法(计算策略)

加权平均法,成本/数量=平均成本/个  用于前后进价相差幅度不大,且定期月末结转 移动加权平均法  ,若需要及时反映信息是    移动加权平均法属于加权平均法 接近市场价,  先进先出法:是一种有序计价的方法,策略,一批一批的来,第一批结算完再结算第二批.先购入先导出,这样计价更接近市场价. 加权平均法,移动加权平均法,先进先出法(计算策略)

ios开发日记11 对tableView三种计算动态行高方法的分析

tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableView中的自定义cell的动态行高,还是有一些玄机的. AD: tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableView中的自定义cell的动态行高,

泛函编程(11)-延后计算-lazy evaluation

延后计算(lazy evaluation)是指将一个表达式的值计算向后拖延直到这个表达式真正被使用的时候.在讨论lazy-evaluation之前,先对泛函编程中比较特别的一个语言属性”计算时机“(strict-ness)做些介绍.strict-ness是指系统对一个表达式计算值的时间点模式:即时计算的(strict),或者延后计算的(non-strict or lazy).non-strict或者lazy的意思是在使用一个表达式时才对它进行计值.用个简单直观的例子说明吧: 1 def lazy

有用函数编程

<序> 感谢 关于本书 关于封面 第一部分 学习函数式思维 第一章 不同的思维 1.1 什么是函数式编程? 1.2 通往有用函数编程之路 1.3 用函数式编程提高生产力 1.3.1 函数范式 1.3.2 声明式编程风格 1.3.3 了解程序的执行 1.3.4 设计并发友好的应用程序 1.3.5 函数风格怎样形成代码 1.4 函数式编程演示样例 1.4.1 用声明式风格表达意图 1.4.1.1 用 LINQ 处理数据 1.4.1.2 用 XAML 描写叙述用户界面 1.4.1.3 声明式函数动画

11.3.1.1 C# 和 F# 中的提前计算

在大多数主流的语言中,指定计算顺序的规则很简单:程序进行函数调用时,先计算所有的参数值,然后再执行函数.我们用前面的例子来演示: TestAndCalculate(Calculate(10)); 在所有的主流语言中,程序都会执行Calculate(10),然后再把结果作为参数值传递给TestAndCalculate.正如我们在前面的示例中已经看到的,如果函数 TestAndCalculate 不需要这个参数值,就很不幸了:在这种情况下,我们就无故地浪费了一些CPU 周期!这种策略称为提前计算策略

C#设计模式(20)——策略者模式(Stragety Pattern)

一.引言 前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税.外商投资企业或外商企业所得税和个人所得税,针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应计算方式.如果不采用策略模式来实现这样一个需求的话,可能

20.设计模式_策略者模式

一.引言 前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税.外商投资企业或外商企业所得税和个人所得税,针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应计算方式.如果不采用策略模式来实现这样一个需求的话,可能