11.3.1.2 Haskell 的延迟计算策略

在延迟计算策略(lazy evaluation strategy)中,函数的参数值,在函数调用时不会计算,直到后来用到这个值时才计算。我们回到前面的例子:

TestAndCalculate(Calculate(10));

在这里,Haskell 直接跳转到TestAndCalculate 函数主体。Haskell 会记住参数值的名字叫 num,如果在后面需要 num 值,就会运行 Calculate(10),然后,继续执行,得到 TestCondition的结果。如果这个函数返回true,表示需要值num,就执行Calculate(10);如果TestCondition 返回false,根本不调用Calculate 函数。

时间: 2024-11-06 07:32:54

11.3.1.2 Haskell 的延迟计算策略的相关文章

11.3.3 用函数模拟延迟计算

在F# 和C# 中计算顺序是提前的:作为给函数参数使用的表达式,在函数自身开始执行之前就计算好了.在C# 和F# 中,我们可以使用函数值模拟延迟计算,另外,F# 甚至有一个专门的关键字,支持延迟计算. 但首先,对于提前计算规则有一个例外,你肯定知道,并经常使用,但只是因为太常用,反而可能没有意识到它的特别.有些特定的C# 运算符,比如,逻辑或(||).逻辑与(&&).条件运算符(?:),以及空合并运算符(null-coalescing,??),能实现短路径(short-circuiting

11.3.2计算策略的比较

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

11.3.5 为 C# 实现延迟值

11.3.5 为 C# 实现延迟值 在 11.3.3 节,我们使用函数来表示 C# 中的延迟计算.我们刚才在 F# 中探讨了Lazy<T> 类型,它为计算过的值,添加了缓存功能.从Visual Studio 2010 开始,在核心的 .NET 库下的System.Lazy <T> 就有了这种类型,因此,我们不必自己实现. 清单 11.18 是简化的 Lazy<T> 类.代码在许多方面做了简化,它不是线程安全的,不处理任何异常,只表达了核心概念. [ 清单的序号终于正常了

2019年10月1日 实现延迟计算功能

class Lazyproperty: def __init__(self,func): print('>>>>>',func) self.func=func def __get__(self, instance, owner):#self 是Lazyproperty()生成的对象 print('get方法') if instance is None: return self #如果instance 是None,就返回Lazyproperty(area)也就是self res

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

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

第十周(11.18-11.24)----结对编程----分数计算

之前的程序写到可以输出分数的算式,接下来就是要怎么计算这个分式算式.我查阅了资料,目前完成到这个状况,对给定的两个分数计算结果. fenshucount里getDinominator是获得分母,getNumerator是获得分子. 获得最大公约数 1 public static int commonDivisor(int x,int y) //计算2个数的最大公约数.按绝对值计算. 2 { 3 if(x==0||y==0) 4 { 5 return 1; 6 } 7 int x1; 8 int

11.3.1 不同的计算策略

Haskell 是一种纯函数式语言,有一个重要的方面,即,不允许任何副作用.有专门的技术在屏幕上输出,或处理文件系统,但对于程序员来说,它是以一种看起来不像有副作用的方式来实现.在这样的语言中,调整计算排序表达式的顺序是可能的:在Haskell 中,直到需要结果,才计算函数:这不会影响程序的结果,因为,函数没有副作用. C# 和 F# 的函数都可能有副作用,这是 F# 中的障碍,因此,语言提供多种方式避免,但仍然会在程序中出现.两种语言都需要指定表达式运行的顺序,否则,我们不可能确定哪个副作用先

[py]函数中yield多次返回,延迟计算特性-杨辉三角

搞清什么是杨辉三角 每行是一个数组, 第一行: [1] 第二行: [1, 1] 第三行: [1, 2, 2, 1] ... 画的好看点就是,不过没啥卵用 1 / 1 1 / \ / 1 2 1 / \ / \ / 1 3 3 1 / \ / \ / \ / 1 4 6 4 1 / \ / \ / \ / \ / 1 5 10 10 5 1 打印杨辉三角 首先要解决一个函数,多次返回值, 我们知道py函数返回多个值,没啥问题. 但是要多次返回值呢?需要借助生成器来完成, 生成器的好处是可以保留现场

光迁PING值延迟计算!以及到中国最快的美国机房是哪个机房?

美国圣安娜KT机房/美国KT机房/美国KT服务器 KT机房是美国直达大陆最快的机房,ping值一般为195MS,是做web服务器的首选机房,深受中小站长的欢迎! 我们平时测试美国服务器的速度,都是通过ping值判断的.(ping美国一台服务器,数据请求过去,再回来,所需要的时间,就是我们常说的ping值), 但是,有一些idc提供商在那吹嘘他的ping是小于100的,首先,我可以肯定的告诉你 只要是说的他的ping值小于100的美国服务器绝对是在忽悠你.中美距离是半个地球, 光一秒钟30万公里,