码迷,mamicode.com
首页 > 其他好文 > 详细

什么是strict function

时间:2015-05-13 21:48:22      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

strict function,严格函数。什么是严格函数呢?

学术上的定义是:

假如有一个函数f。

我们定义技术分享

其中技术分享是一个表达式,这个表达式要么没有返回值,要么是一个死循环(或者循环直到出错退出)。

这就是严格函数。

 

通俗来讲,如果一个函数被调用前,它的参数被完全计算求值了,那么它就是一个严格函数。

与严格函数相反的是非严格函数,非严格函数被调用时,它的参数可能没有被计算求值,这也叫做惰性求值(lazy evaluation)。

惰性求值有什么好处呢?

除可以得到性能的提升外,惰性求值的最重要的好处是它可以构造一个无限的数据类型。

举个栗子:

在纯函数式编程语言Haskell中,一个斐波那契可以如下定义:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

在Haskell中,“:”表示在数列后追加一个元素,tail呢,返回去掉第一个元素的数列,zipWith使用指定的函数(这里是加)来合并两个数列中的元素到一个新数列中。 

这个语句不容易理解,实际上,zipWith相加的是两个数列,fibs和tail fibs,生成的是一个新的数列,追加到了0和1的后面。

fibs是无限长的。如果这里不是惰性求值,那么这条语句将会导致内存耗尽。。。

这就是惰性求值的好处。

 

自然,严格函数就是非惰性求值函数,或及早求值函数。

如果一门编程语言只支持严格函数,那么该语言就可以叫做严格编程语言。

现在几乎所有的编程语言都是严格。

比如,C#,Java,Perl,Python,Ruby,Common Lisp,ML都是严格的。

而Haskell,Miranda,Clean都是非严格的。

但是像C,C++,Scheme,它们的普通函数都是严格的,但是自带的宏系统能够定义非严格函数。

 

什么是strict function

标签:

原文地址:http://www.cnblogs.com/sirlipeng/p/4501675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!