Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 协调惰性评估与复杂性分析_Haskell_Lazy Evaluation_Sicp - Fatal编程技术网

Haskell 协调惰性评估与复杂性分析

Haskell 协调惰性评估与复杂性分析,haskell,lazy-evaluation,sicp,Haskell,Lazy Evaluation,Sicp,在的streams 2视频中,Abelson给出了使用模拟计算机求解微分方程的示例。然后,他编写了这个程序,使用惰性求值来绕过循环定义依赖关系 他说,这种技术的问题在于,当你设计更复杂的程序时,你最终会在任何地方都出现延迟表达式,这使得它很难理解。为了优雅地解决这个问题,他说,你必须让整个语言以某种表现力为代价,即拖尾问题 这是和采取的方法。在Haskell中,我发现很难对复杂性进行推理,而且很容易编写消耗太多内存和时间的程序 我曾经和他谈过这个问题,他不同意你必须让你的整个语言变得优雅,这是H

在的streams 2视频中,Abelson给出了使用模拟计算机求解微分方程的示例。然后,他编写了这个程序,使用惰性求值来绕过循环定义依赖关系

他说,这种技术的问题在于,当你设计更复杂的程序时,你最终会在任何地方都出现延迟表达式,这使得它很难理解。为了优雅地解决这个问题,他说,你必须让整个语言以某种表现力为代价,即拖尾问题

这是和采取的方法。在Haskell中,我发现很难对复杂性进行推理,而且很容易编写消耗太多内存和时间的程序


我曾经和他谈过这个问题,他不同意你必须让你的整个语言变得优雅,这是Haskell的一个设计缺陷。为了解决这个问题,我们应该如何具体地让一种语言部分地懒惰呢?有这种语言的例子吗?我想学习更多关于函数式语言的知识,但是禁止任何地方的副作用和急切的求值,包括I/O,会让事情变得有点。。。违反直觉。

不难对大O复杂性进行推理——这在懒惰的语言中是不同的。关于这本书的一个经典参考是(以及后来的书),它描述了银行家方法(见第3章)来解释复杂性


一般来说,我们需要一种惰性和严格行为的混合——有些数据结构我们可能希望在其“脊椎”中严格,但在其元素中懒惰。我们可能希望对其他数据结构的元素严格要求,但可能在其脊椎中具有选择性惰性,例如潜在的无限结构向量。Haskell提供了选择性严格的惰性,包括直接在数据构造函数定义中。其他语言提供严格和选择性的懒惰。一般来说,许多人发现Haskell的默认惰性行为具有某些优势,特别是在定义新的控制结构方面。例如,请参见(这实际上是为了响应Harper而编写的)。

您可以使用$使函数严格(因此不是懒惰的)!运算符,所以它不是禁止的。一个人的设计缺陷是另一个人的设计特征……罗伯特·哈珀以攻击哈斯克尔而闻名,因此,对他所说的话要谨慎,并寻求一点平衡。@AndrewC
s/pinch/wheelbarrow/