G***l 发帖数: 355 | 1 Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP
为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而
同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python,
Ruby之类也很流行。
FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不
多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是
OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。
FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一
些我的个人体验。水平有限,思维比较杂乱,大家见谅。
写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
想到一个input,然后这个input怎么转化,操作,最后变成output。OO能让你灵活的拆
分开数据和算法并且模块化。但你只要用OO建模过,你就会发现一开始你想的就是有哪
些类,你想到的都是名词,之后才会想这些对象之间有什么操作或者相互关系。而事实
上,写程序复杂的地方在于算法,而且我个人的经验,不管是需求改变还是refactor,
改code时候,大多都是在改算法方面的,而数据改变的情况较少。从形式化的角度分析
,OO在behavior model方面有天然的缺陷。你看gof那些pattern,几乎都是用来弥补oo
在behavior的扩展性,灵活性等上面各种不足的。而behavior model却是fp的强项。因
为在fp里面,最基础的是function,数据是次要的,主要是如何操作数据。而且由于没
有side effect,修改添加任何function都很灵活,这真是大多数程序逻辑扩展性的重
点。再加上fp的一些currying,high order function等等特性,在behavior建模的方
面更加强大。
抛开high level modeling上OO从名词开始,FP从动词开始的区别。在写程序上,fp更
贴近思维。现在很多人学的别扭是因为你先学了imperative,思维模式已经在那了。比
如,很多pure fp里面没有循环,只有递归。很多人觉得别扭。可是算法归根到底是数
学,你仔细想想,从小到大做了那么多数学题,解题时候有用到“循环”吗?我还真没
有。但到了计算机世界就变了。斐波那契数列多简洁,可我却要写个循环。。。在算法
intensive的场合,比如一些数学的模型,compiler,DSL, AI等等地方,fp用的很多,
比如lisp可就是ai的人搞出来的。
FP不容易出错。写程序出错有几种情况,一种是需求理解错了,人家要b=2*a你却写成b
=3*a。另外一种是技术不够熟练,比如++i跟i++没搞清楚区别就用了。这两个能通过高
水平的程序员和沟通解决。另外一种是程序很复杂,人就容易就会犯错。人的能力有限
,一下给你n个数字,一分钟后让你说出来,大多人肯定都不行。虽然模块化的理念很
美好,可实际操作起来,总是有很多地方还是很复杂。而fp没有side effect,大大降
低了复杂代码逻辑里人犯错的机会,因为你写一个function的时候只要保持它的输入输
出对,完全不需要考虑和别的function的互相影响。
FP会取代OO吗?我觉得就像OO没有取代过程式一样,FP也不会取代OO。且不说c这样的
还很流行。就是在OO程序里,过程式的影子到处可见,一个方法内部的实现不就是过程
式的。未来肯定是FP和OO并行。
没有万能钥匙。FP当然有缺点。有些是天然的,FP自己的特性比如no side effect,
lazy之类带来的,所以不是任何地方都是适用FP的。另外一些是暂时的,比如会的人少
,因为过去大学都是不教fp的,就算有也是选修,而现在很多学校的教学里,
imperative并不比fp优先,学生一开始就是接触的fp的思维。再比如类库少,没有东西
一开始就类库多,随着用的人多类库自然会越来越多等等。
最后举个现实的例子,现在FP的工业界用的最多的地方之一就是花街front office,不
少公司都开始在一些适用的场合用fp。因为fp正满足了他们的要求。需求改动多,市场
风云变幻,今天要这么做,明天要那样。出错的可能要降到最低,不然直接就是银子的
损失。算法多而数据模型变动很少,毕竟stock,bond就那么些attribute,而利用这些
attribute的不同方法技术却很多。fp暂时的缺点对他们也不是问题,会的人少?自有
高薪招来的聪明人会。类库少?大多都是in house实现的东西,除开gui,后台的系统
很少用到第三方的类库。 |
p***o 发帖数: 1252 | 2 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
G***l 发帖数: 355 | 3 你想说什么?
Haskell:
fibo 0 = 0
fibo 1 = 1
fibo n = fibo (n-1) + fibo (n-2)
【在 p***o 的大作中提到】 : 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把 : : FP : 的。
|
p***o 发帖数: 1252 | 4 没用过Haskell,你解释一下内部是怎么实现的,难道每个fibo n都是一个type?
C/C++/Java里面fibo要是一个函数的话,n大一点那是跑不出结果的。
【在 G***l 的大作中提到】 : 你想说什么? : Haskell: : fibo 0 = 0 : fibo 1 = 1 : fibo n = fibo (n-1) + fibo (n-2)
|
G***l 发帖数: 355 | 5 我只是写了个最简单的。n大的话这个肯定也很慢。得写tail recursion版的。要追求
性能的话,肯定要复杂。但是从数学角度讲递归是很自然的写法。有没有搞compiler的
说说,非tail recursoin有没有可能让compiler做优化,如果能的话,最简单的写法也
能达到效率。
【在 p***o 的大作中提到】 : 没用过Haskell,你解释一下内部是怎么实现的,难道每个fibo n都是一个type? : C/C++/Java里面fibo要是一个函数的话,n大一点那是跑不出结果的。
|
g****r 发帖数: 1589 | 6 算这玩意难道不正是FP的强项吗?
【在 p***o 的大作中提到】 : 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把 : : FP : 的。
|
p***o 发帖数: 1252 | 7 我也觉得应该是,就是不明白具体怎么算的。
【在 g****r 的大作中提到】 : 算这玩意难道不正是FP的强项吗?
|
p***o 发帖数: 1252 | 8 好吧,查了下,还真不如用个loop呢 ...
haskell.org/haskellwiki/The_Fibonacci_sequence
【在 p***o 的大作中提到】 : 我也觉得应该是,就是不明白具体怎么算的。
|
G***l 发帖数: 355 | 9 这个简单的例子当然没什么区别。但是你不觉得recursive的定义比loop更贴近自然思
维吗?再说FP好的地方又不是说他能递归,现在流行的语言都能递归。优点在与是指一
切都是function的一种思维,建模方式,只要你用这种思维方式,斐波那契的例子你自
然就不会去想用循环写。
【在 p***o 的大作中提到】 : 好吧,查了下,还真不如用个loop呢 ... : haskell.org/haskellwiki/The_Fibonacci_sequence
|
g****r 发帖数: 1589 | 10 这种写法应该更接近于数学定义,可读性也强一些,碰到复杂的情况这种写法可能更简
洁一些,不过这个也看各人的喜好了
用尾递归的话,compiler应该会自动编译成loop,性能上区别应该不大
【在 p***o 的大作中提到】 : 好吧,查了下,还真不如用个loop呢 ... : haskell.org/haskellwiki/The_Fibonacci_sequence
|
|
|
t****a 发帖数: 1212 | 11 萝卜青菜,各有所爱,不用争了。
--一个铁杆FP用户
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
t***a 发帖数: 416 | 12 他刚才那个fibo写法,在haskell里n大点也跑不出
【在 p***o 的大作中提到】 : 没用过Haskell,你解释一下内部是怎么实现的,难道每个fibo n都是一个type? : C/C++/Java里面fibo要是一个函数的话,n大一点那是跑不出结果的。
|
p*****2 发帖数: 21240 | 13 不太同意LZ。前一段时间研究过尾递归。
http://blog.sina.com.cn/s/blog_b9285de20101i5s1.html
递归本身是很自然的思维,但是你要是转成尾递归的过程就很不自然,跟iteration也
差不多。 |
n*w 发帖数: 3393 | 14 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。
有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能
attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。 |
p*****2 发帖数: 21240 | 15
有scala怕啥?
【在 n*w 的大作中提到】 : 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。 : 有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能 : attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。
|
n*w 发帖数: 3393 | 16 有时只让用Java
【在 p*****2 的大作中提到】 : : 有scala怕啥?
|
g****t 发帖数: 31659 | 17 Turing诞辰一百年还是怎么回事,普林斯顿弄了个纪念活动.好多图灵奖得主
作报告.
结果好像有个人很不厚道的讲,Lambda calculus会dominate掉图灵机.
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
n*w 发帖数: 3393 | 18 好像不少做programming language研究的人稍微多喜欢一些Lambda calculus。
不过本版有自认大牛可能会重复地说其只不过是语法糖。
【在 g****t 的大作中提到】 : Turing诞辰一百年还是怎么回事,普林斯顿弄了个纪念活动.好多图灵奖得主 : 作报告. : 结果好像有个人很不厚道的讲,Lambda calculus会dominate掉图灵机. : : FP : 的。
|
n******t 发帖数: 4406 | 19 但是大部分实际系统级的开发,这种搞法都会把机器搞死。
其实 FP不是什么新东西。这几年火,还是因为硬件太快同事需要计算的地方
太多的原因。
【在 G***l 的大作中提到】 : 这个简单的例子当然没什么区别。但是你不觉得recursive的定义比loop更贴近自然思 : 维吗?再说FP好的地方又不是说他能递归,现在流行的语言都能递归。优点在与是指一 : 切都是function的一种思维,建模方式,只要你用这种思维方式,斐波那契的例子你自 : 然就不会去想用循环写。
|
n*w 发帖数: 3393 | 20 FP 40 年了。
【在 n******t 的大作中提到】 : 但是大部分实际系统级的开发,这种搞法都会把机器搞死。 : 其实 FP不是什么新东西。这几年火,还是因为硬件太快同事需要计算的地方 : 太多的原因。
|
|
|
r*g 发帖数: 3159 | 21 Fp 的竞争对手是过程式编程, 而不是oo。计算性的两大理论图灵状态机和laMbda
calculus是等价的,分别对应过程式和函数式编程。oo是另一层面的东西,不能跟fp做
二选一的比较。 |
r*g 发帖数: 3159 | 22 其实现在这些fp真的只是语法糖而已。解释器编译器还是把它们转成过程式forloop什
么的。
真正在硬件层次上能实现lambda calculus, 不用寄存器了,才是fp的真正逆袭。
【在 p*****2 的大作中提到】 : 不太同意LZ。前一段时间研究过尾递归。 : http://blog.sina.com.cn/s/blog_b9285de20101i5s1.html : 递归本身是很自然的思维,但是你要是转成尾递归的过程就很不自然,跟iteration也 : 差不多。
|
s***o 发帖数: 6934 | 23 when mentioning functional languages, why not include arguably the most
successful one in industry usage, especially distributed computing: Erlang?
Ericsson switches
Riak (this is kicking Cassandra's ass now)
CouchDB
Amazon SimpleDB
rabbitMQ
Ejabberd
IMDB
Facebook chat backend
Whatsapp
...
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
x****u 发帖数: 44466 | 24 搞死机器的唯一原因是没有搞清瓶颈所在。
12306也不是不能后台用python。
【在 n******t 的大作中提到】 : 但是大部分实际系统级的开发,这种搞法都会把机器搞死。 : 其实 FP不是什么新东西。这几年火,还是因为硬件太快同事需要计算的地方 : 太多的原因。
|
g*****g 发帖数: 34805 | 25 真是无知当有趣。匿名内部类的变量本来就只要local variable是final,instance
variable不需要。就算你非要Local variable
final Wrapper w = new Wrapper(v);
new InnerClass(w) {
// update v
}
v不就能变动了?本来就是一点糖水,加不加都不影响功能。也就你这种鸵鸟在这个问
题上喋喋不休。
【在 n*w 的大作中提到】 : 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。 : 有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能 : attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。
|
y***y 发帖数: 224 | 26
我一直都不明白为啥local variable必须是final...
【在 g*****g 的大作中提到】 : 真是无知当有趣。匿名内部类的变量本来就只要local variable是final,instance : variable不需要。就算你非要Local variable : final Wrapper w = new Wrapper(v); : new InnerClass(w) { : // update v : } : v不就能变动了?本来就是一点糖水,加不加都不影响功能。也就你这种鸵鸟在这个问 : 题上喋喋不休。
|
g*****g 发帖数: 34805 | 27 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄
漏。
final的话,直接拷贝一份就行。
【在 y***y 的大作中提到】 : : 我一直都不明白为啥local variable必须是final...
|
z****e 发帖数: 54598 | 28 这是一个很经典的问题
但是我从来都是绕过它不用匿名类
哦也
【在 y***y 的大作中提到】 : : 我一直都不明白为啥local variable必须是final...
|
z****e 发帖数: 54598 | 29 明白了,原来如此
【在 g*****g 的大作中提到】 : 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄 : 漏。 : final的话,直接拷贝一份就行。
|
z****e 发帖数: 54598 | 30 小菊花你对这种国家层面的系统没经验就不要现了
说一个错一个,真神当时举例都明说了
铁道部这种规模用java,毫无疑问
主要问题都在db那一层上
尤其是transaction
用db2或者oracle的话,websphere/weblogic/jboss就是明摆着的利器你不用
非要自己去手写appserver,就算你牛得一塌糊涂
能搞一个weblogic一样的appserver出来
你也要看看各数据库对于python的支持到了什么程度
python对于db的api多数还停留在手写sql的阶段
不象java,有jdbc,再往上还有jpa和jdo的规范
关于transaction的ejb有完整的一套方法来处理
只需要用annotation就可以很轻松地搞定各种事务之间的合并
不过你用其他语言根本到不了db那一层
在business layer就会让内存爆掉,就你这种水平去手动控制内存的管理
不泄漏才见鬼,不是看不起你,这里估计也没人能真搞定这个东西的
尤其是手写,一不小心就漏了
你还不如告诉我你用python手写一个hadoop也不是不可以
可信度还更高点
不仅是火车票,现在几乎所有的机票也都是java搞的
除了欧洲那家,美帝已经全java了,很多年以前就全java了
最早mit的几个毕业生搞的,client side用的是swing,叹为观止
欧洲那家back end是c++
但是web就是struts那些东西,欧洲那家名字叫做amadeus
这个星球上30%的机票都出自那家公司的系统
不过你这种外行肯定接触不到那么深入的系统
可能做个reseller的programmer,用点他们提供的接口倒是很有可能
不过他们有网站可以查询机票信息,从url就可以看出他们在用什么了
.action,dispatcher,一看就是struts那些东西
【在 x****u 的大作中提到】 : 搞死机器的唯一原因是没有搞清瓶颈所在。 : 12306也不是不能后台用python。
|
|
|
h*****4 发帖数: 4219 | 31 课上刚分析过,据说是在anonymous inner class里面,对这个变量的处理其实是当作
常量了,所以要锁定住。
比方说弄了个GUI,在Jlabel那里要显示一个String,当你运行了GUI之后,这个String
就不应该由外界改变了。
【在 n*w 的大作中提到】 : 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。 : 有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能 : attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。
|
h*****4 发帖数: 4219 | 32 re
【在 g*****g 的大作中提到】 : 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄 : 漏。 : final的话,直接拷贝一份就行。
|
n*w 发帖数: 3393 | 33 It's about semantic. 所有语言都会被编译成汇编。按这样的说法oop, logic
programming也是语法糖。不过语法糖有没有一个理论上的严格定义?
随便提醒一下看客,有人给了一个java anonymous inner class的access 非final
variable 的hack. 不要那样用。那不是实现proper closure. it will be a big mess
when it gets a little complex.
【在 r*g 的大作中提到】 : 其实现在这些fp真的只是语法糖而已。解释器编译器还是把它们转成过程式forloop什 : 么的。 : 真正在硬件层次上能实现lambda calculus, 不用寄存器了,才是fp的真正逆袭。
|
r*g 发帖数: 3159 | 34 高层次的FP我看来都是语法糖而已。但FP也可以一直到底层。例如直接作labmda
calculus的硬件,象
http://en.wikipedia.org/wiki/Graph_reduction_machine
mess
【在 n*w 的大作中提到】 : It's about semantic. 所有语言都会被编译成汇编。按这样的说法oop, logic : programming也是语法糖。不过语法糖有没有一个理论上的严格定义? : 随便提醒一下看客,有人给了一个java anonymous inner class的access 非final : variable 的hack. 不要那样用。那不是实现proper closure. it will be a big mess : when it gets a little complex.
|
d****i 发帖数: 4809 | 35 都会被编译成汇编? Native的C/C++编译后难道不是0101的机器码吗?
mess
【在 n*w 的大作中提到】 : It's about semantic. 所有语言都会被编译成汇编。按这样的说法oop, logic : programming也是语法糖。不过语法糖有没有一个理论上的严格定义? : 随便提醒一下看客,有人给了一个java anonymous inner class的access 非final : variable 的hack. 不要那样用。那不是实现proper closure. it will be a big mess : when it gets a little complex.
|
w******p 发帖数: 166 | 36 recursive Fibonacci in python, gets 100th within a second:
def fibgen(n, f1, f2):
if n==0: return f1+f2
return fibgen(n-1, f2, f1+f2)
print fibgen(100,0,1)
【在 p***o 的大作中提到】 : 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把 : : FP : 的。
|
n*w 发帖数: 3393 | 37 You are right. Machine code is more precise.
【在 d****i 的大作中提到】 : 都会被编译成汇编? Native的C/C++编译后难道不是0101的机器码吗? : : mess
|
E*****m 发帖数: 25615 | 38 Erlang 的massive multi-thread 超強, 但是語法實在太糟糕了。
不知道 Akka 這些技術是不是趕上 Erlang virtual machine 了。
【在 s***o 的大作中提到】 : when mentioning functional languages, why not include arguably the most : successful one in industry usage, especially distributed computing: Erlang? : Ericsson switches : Riak (this is kicking Cassandra's ass now) : CouchDB : Amazon SimpleDB : rabbitMQ : Ejabberd : IMDB : Facebook chat backend
|
d********g 发帖数: 10550 | 39 数字大了不行,recursion无优化算不出fib(1000),而且效率很低。有个矩阵的解法还
可以:
def _mul(A, B):
a, b, c = A
d, e, f = B
return a * d + b * e, a * e + b * f, b * e + c * f
def _pow(A, n):
if n == 1:
return A
elif n & 1 == 0:
return _pow(_mul(A, A), n // 2)
else:
return _mul(A, _pow(_mul(A, A), (n - 1) // 2))
def fib(n):
return n if n < 2 else _pow((1, 1, 0), n - 1)[0]
普通笔记本算fib(1000000)也就一两秒
【在 w******p 的大作中提到】 : recursive Fibonacci in python, gets 100th within a second: : def fibgen(n, f1, f2): : if n==0: return f1+f2 : return fibgen(n-1, f2, f1+f2) : print fibgen(100,0,1)
|
r*******n 发帖数: 3020 | 40 非常赞同!
转尾递归就失去了递归带来的好处,还不如loop,
clojure里解决方案是 if 。。。 recur。。。
这种就很好。
【在 p*****2 的大作中提到】 : 不太同意LZ。前一段时间研究过尾递归。 : http://blog.sina.com.cn/s/blog_b9285de20101i5s1.html : 递归本身是很自然的思维,但是你要是转成尾递归的过程就很不自然,跟iteration也 : 差不多。
|
|
|
s***o 发帖数: 6934 | 41 you are absolutely right, erlang就是语法太烂, 但otp实在太强大了
最终jvm上的Akka这些肯定会赶上的,时间问题。但也有可能发展不了那么长时间又有
新东西了。
【在 E*****m 的大作中提到】 : Erlang 的massive multi-thread 超強, 但是語法實在太糟糕了。 : 不知道 Akka 這些技術是不是趕上 Erlang virtual machine 了。
|
z****e 发帖数: 54598 | 42 如果你们说语法的话,显然应该说scala,而不是akka
akka哪有什么语法,无非一堆jars而已
【在 s***o 的大作中提到】 : you are absolutely right, erlang就是语法太烂, 但otp实在太强大了 : 最终jvm上的Akka这些肯定会赶上的,时间问题。但也有可能发展不了那么长时间又有 : 新东西了。
|
s***o 发帖数: 6934 | 43 the counter part of Akka is not the erlang language but its concurrent model
.
【在 z****e 的大作中提到】 : 如果你们说语法的话,显然应该说scala,而不是akka : akka哪有什么语法,无非一堆jars而已
|
p*****2 发帖数: 21240 | 44
好像scala里也有个类似的。不过本来也没有禁止for while
【在 r*******n 的大作中提到】 : 非常赞同! : 转尾递归就失去了递归带来的好处,还不如loop, : clojure里解决方案是 if 。。。 recur。。。 : 这种就很好。
|
z****e 发帖数: 54598 | 45 也不是model吧
akka是具体的实现,而model还只是一个概念
model
【在 s***o 的大作中提到】 : the counter part of Akka is not the erlang language but its concurrent model : .
|
c*********e 发帖数: 16335 | 46 en,oop有优点也有缺点,缺点就是,什么东西都是一个object,一个object就象一个大
包裹,占用大量内存,这样scalability就会有问题。比如同时有1千万个用户登录一个
网站做交易,那就要有1千万个java beans来为每一个用户服务,非常占内存。同时,每
个用户都要做数据库交易。这样,就显出oop的缺点。现在做memory database火起来,
可能就是基于这方面的原因。
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
s****0 发帖数: 117 | 47 memory database火和oop没关系。
忘了原话怎么说的,意思是现代的硬件技术没有被充分利用,所以数据库需要重新设计
。voltDB
,每
【在 c*********e 的大作中提到】 : en,oop有优点也有缺点,缺点就是,什么东西都是一个object,一个object就象一个大 : 包裹,占用大量内存,这样scalability就会有问题。比如同时有1千万个用户登录一个 : 网站做交易,那就要有1千万个java beans来为每一个用户服务,非常占内存。同时,每 : 个用户都要做数据库交易。这样,就显出oop的缺点。现在做memory database火起来, : 可能就是基于这方面的原因。 : : FP : 的。
|
s***o 发帖数: 6934 | 48 i think you got the point...
【在 z****e 的大作中提到】 : 也不是model吧 : akka是具体的实现,而model还只是一个概念 : : model
|
g*****g 发帖数: 34805 | 49 Memory is rarely the issue with high concurrency system. Memory is too cheap
these days. Put 100 instances, each serving 100K users, with 100K Bytes for
each user session, it's only 10G memory for each instance, easily handled
by a moderate server node.
,每
【在 c*********e 的大作中提到】 : en,oop有优点也有缺点,缺点就是,什么东西都是一个object,一个object就象一个大 : 包裹,占用大量内存,这样scalability就会有问题。比如同时有1千万个用户登录一个 : 网站做交易,那就要有1千万个java beans来为每一个用户服务,非常占内存。同时,每 : 个用户都要做数据库交易。这样,就显出oop的缺点。现在做memory database火起来, : 可能就是基于这方面的原因。 : : FP : 的。
|
s***o 发帖数: 6934 | 50 comparing to memory, CPU is even cheaper
cheap
for
【在 g*****g 的大作中提到】 : Memory is rarely the issue with high concurrency system. Memory is too cheap : these days. Put 100 instances, each serving 100K users, with 100K Bytes for : each user session, it's only 10G memory for each instance, easily handled : by a moderate server node. : : ,每
|
|
|
g*****g 发帖数: 34805 | 51 Not really, you have limited upside on additional CPU on a rack. Plus, many
servers charge license fee by CPU power. NoSQL is not very necessary if
scaling up is cheap.
【在 s***o 的大作中提到】 : comparing to memory, CPU is even cheaper : : cheap : for
|
E*****m 发帖数: 25615 | 52
Scala 語法比 Erlang 好點, 但是不上 Akka 不能和
Erlang 的長處競爭。
你是不是認真的以為我們都不知道 Akka 不是個語言?
那你太累了。
【在 z****e 的大作中提到】 : 如果你们说语法的话,显然应该说scala,而不是akka : akka哪有什么语法,无非一堆jars而已
|
y***y 发帖数: 224 | 53
多谢!
您的这个解释我明白,之前看到过.
可我还是不懂, 为啥只有加final之后才可以拷贝一份? 就设计成传给匿名类的时候就
是拷贝一份不行么?
【在 g*****g 的大作中提到】 : 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄 : 漏。 : final的话,直接拷贝一份就行。
|
n*w 发帖数: 3393 | 54 Good question. It's more like a design "choice".
【在 y***y 的大作中提到】 : : 多谢! : 您的这个解释我明白,之前看到过. : 可我还是不懂, 为啥只有加final之后才可以拷贝一份? 就设计成传给匿名类的时候就 : 是拷贝一份不行么?
|
g*****g 发帖数: 34805 | 55 不final拷贝之后没法保持数据一致。
【在 y***y 的大作中提到】 : : 多谢! : 您的这个解释我明白,之前看到过. : 可我还是不懂, 为啥只有加final之后才可以拷贝一份? 就设计成传给匿名类的时候就 : 是拷贝一份不行么?
|
z****e 发帖数: 54598 | 56 这个玩意除了电信业以外其他行业都未经过检验
可能也就是网络游戏里面有几个在用
象我们这种理论上比较适合上akka的,都没有用上
不用说其它行业了,出来的时间有些迟了
另外你装傻又不是一天两天了
【在 E*****m 的大作中提到】 : : Scala 語法比 Erlang 好點, 但是不上 Akka 不能和 : Erlang 的長處競爭。 : 你是不是認真的以為我們都不知道 Akka 不是個語言? : 那你太累了。
|
n*w 发帖数: 3393 | 57 Java之父James Gosling的原话:
"Closures were left out of Java initially more because of time pressures
than anything else. In the early days of Java the lack of closures was
pretty painful, and so inner classes were born: an uncomfortable compromise
that attempted to avoid a number of hard issues. But as is normal in so many
design issues, the simplifications didn't really solve any problems, they
just moved them."
只是closure 的语法糖的话就不会有 “didn't really solve any problems, they
just moved them."这样的话。
【在 n*w 的大作中提到】 : Good question. It's more like a design "choice".
|
a*****e 发帖数: 1700 | 58 goodbug 对语法糖的这个词有他自己的定义,你也不要太纠结了
compromise
many
【在 n*w 的大作中提到】 : Java之父James Gosling的原话: : "Closures were left out of Java initially more because of time pressures : than anything else. In the early days of Java the lack of closures was : pretty painful, and so inner classes were born: an uncomfortable compromise : that attempted to avoid a number of hard issues. But as is normal in so many : design issues, the simplifications didn't really solve any problems, they : just moved them." : 只是closure 的语法糖的话就不会有 “didn't really solve any problems, they : just moved them."这样的话。
|
a*****e 发帖数: 1700 | 59 这个转换叫 worker/wrapper transformation,可以把上面那个 fib 的定义自动转换
为尾递归。
见 http://www.cs.nott.ac.uk/~gmh/wrapper.pdf 第六节。
【在 G***l 的大作中提到】 : 我只是写了个最简单的。n大的话这个肯定也很慢。得写tail recursion版的。要追求 : 性能的话,肯定要复杂。但是从数学角度讲递归是很自然的写法。有没有搞compiler的 : 说说,非tail recursoin有没有可能让compiler做优化,如果能的话,最简单的写法也 : 能达到效率。
|
z****e 发帖数: 54598 | 60 你是不是回错了?
他们已经在说另外一个东西了
【在 a*****e 的大作中提到】 : goodbug 对语法糖的这个词有他自己的定义,你也不要太纠结了 : : compromise : many
|
|
|
g*****g 发帖数: 34805 | 61 什么叫做我自己的定义。我把wiki上的定义都拿出来了。
【在 a*****e 的大作中提到】 : goodbug 对语法糖的这个词有他自己的定义,你也不要太纠结了 : : compromise : many
|
a*****e 发帖数: 1700 | 62 没错啊,我就是劝 nkw 想开一点,不要老是纠结在 closure 和 inner class 的差别
了,
反正 goodbug 认为没差别,就算有差别,也是糖水的差别
【在 z****e 的大作中提到】 : 你是不是回错了? : 他们已经在说另外一个东西了
|
n*w 发帖数: 3393 | 63 我不在乎个别id怎么认为,根本放弃和某id讨论了。正好偶然看到James的这段和前面
几个帖子的内容相关就贴上来了。
能搞个投票就好了,我很好奇有多少读过这些讨论的人还认为closure 和 inner class
没差别或只是糖水的差别。
【在 a*****e 的大作中提到】 : 没错啊,我就是劝 nkw 想开一点,不要老是纠结在 closure 和 inner class 的差别 : 了, : 反正 goodbug 认为没差别,就算有差别,也是糖水的差别
|
g*****g 发帖数: 34805 | 64 好奇有啥用。你觉得不能实现的实现给你看了。糖水的定义在wiki上,还死不承认就是
极品了。
class
【在 n*w 的大作中提到】 : 我不在乎个别id怎么认为,根本放弃和某id讨论了。正好偶然看到James的这段和前面 : 几个帖子的内容相关就贴上来了。 : 能搞个投票就好了,我很好奇有多少读过这些讨论的人还认为closure 和 inner class : 没差别或只是糖水的差别。
|
n*w 发帖数: 3393 | 65 Troll, 自己再读下wiki和以前关于Wiki那段的讨论,及James的那段。又精确地描叙了
自己。
【在 g*****g 的大作中提到】 : 好奇有啥用。你觉得不能实现的实现给你看了。糖水的定义在wiki上,还死不承认就是 : 极品了。 : : class
|
g*****g 发帖数: 34805 | 66 james的话还成为救命稻草了?你小真是够极品的,james说的是java语言的设计有一些
compromise,几乎所有的语言都有很多compromise。哪里提到closure相比inner class
不是糖水了?你觉得不能实现的,我都实现给你看了,你还jjww有完没完?
【在 n*w 的大作中提到】 : Troll, 自己再读下wiki和以前关于Wiki那段的讨论,及James的那段。又精确地描叙了 : 自己。
|
n*w 发帖数: 3393 | 67 Troll. 不断重复着。
class
【在 g*****g 的大作中提到】 : james的话还成为救命稻草了?你小真是够极品的,james说的是java语言的设计有一些 : compromise,几乎所有的语言都有很多compromise。哪里提到closure相比inner class : 不是糖水了?你觉得不能实现的,我都实现给你看了,你还jjww有完没完?
|
G***l 发帖数: 355 | 68 Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP
为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而
同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python,
Ruby之类也很流行。
FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不
多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是
OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。
FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一
些我的个人体验。水平有限,思维比较杂乱,大家见谅。
写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
想到一个input,然后这个input怎么转化,操作,最后变成output。OO能让你灵活的拆
分开数据和算法并且模块化。但你只要用OO建模过,你就会发现一开始你想的就是有哪
些类,你想到的都是名词,之后才会想这些对象之间有什么操作或者相互关系。而事实
上,写程序复杂的地方在于算法,而且我个人的经验,不管是需求改变还是refactor,
改code时候,大多都是在改算法方面的,而数据改变的情况较少。从形式化的角度分析
,OO在behavior model方面有天然的缺陷。你看gof那些pattern,几乎都是用来弥补oo
在behavior的扩展性,灵活性等上面各种不足的。而behavior model却是fp的强项。因
为在fp里面,最基础的是function,数据是次要的,主要是如何操作数据。而且由于没
有side effect,修改添加任何function都很灵活,这真是大多数程序逻辑扩展性的重
点。再加上fp的一些currying,high order function等等特性,在behavior建模的方
面更加强大。
抛开high level modeling上OO从名词开始,FP从动词开始的区别。在写程序上,fp更
贴近思维。现在很多人学的别扭是因为你先学了imperative,思维模式已经在那了。比
如,很多pure fp里面没有循环,只有递归。很多人觉得别扭。可是算法归根到底是数
学,你仔细想想,从小到大做了那么多数学题,解题时候有用到“循环”吗?我还真没
有。但到了计算机世界就变了。斐波那契数列多简洁,可我却要写个循环。。。在算法
intensive的场合,比如一些数学的模型,compiler,DSL, AI等等地方,fp用的很多,
比如lisp可就是ai的人搞出来的。
FP不容易出错。写程序出错有几种情况,一种是需求理解错了,人家要b=2*a你却写成b
=3*a。另外一种是技术不够熟练,比如++i跟i++没搞清楚区别就用了。这两个能通过高
水平的程序员和沟通解决。另外一种是程序很复杂,人就容易就会犯错。人的能力有限
,一下给你n个数字,一分钟后让你说出来,大多人肯定都不行。虽然模块化的理念很
美好,可实际操作起来,总是有很多地方还是很复杂。而fp没有side effect,大大降
低了复杂代码逻辑里人犯错的机会,因为你写一个function的时候只要保持它的输入输
出对,完全不需要考虑和别的function的互相影响。
FP会取代OO吗?我觉得就像OO没有取代过程式一样,FP也不会取代OO。且不说c这样的
还很流行。就是在OO程序里,过程式的影子到处可见,一个方法内部的实现不就是过程
式的。未来肯定是FP和OO并行。
没有万能钥匙。FP当然有缺点。有些是天然的,FP自己的特性比如no side effect,
lazy之类带来的,所以不是任何地方都是适用FP的。另外一些是暂时的,比如会的人少
,因为过去大学都是不教fp的,就算有也是选修,而现在很多学校的教学里,
imperative并不比fp优先,学生一开始就是接触的fp的思维。再比如类库少,没有东西
一开始就类库多,随着用的人多类库自然会越来越多等等。
最后举个现实的例子,现在FP的工业界用的最多的地方之一就是花街front office,不
少公司都开始在一些适用的场合用fp。因为fp正满足了他们的要求。需求改动多,市场
风云变幻,今天要这么做,明天要那样。出错的可能要降到最低,不然直接就是银子的
损失。算法多而数据模型变动很少,毕竟stock,bond就那么些attribute,而利用这些
attribute的不同方法技术却很多。fp暂时的缺点对他们也不是问题,会的人少?自有
高薪招来的聪明人会。类库少?大多都是in house实现的东西,除开gui,后台的系统
很少用到第三方的类库。 |
p***o 发帖数: 1252 | 69 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
G***l 发帖数: 355 | 70 你想说什么?
Haskell:
fibo 0 = 0
fibo 1 = 1
fibo n = fibo (n-1) + fibo (n-2)
【在 p***o 的大作中提到】 : 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把 : : FP : 的。
|
|
|
p***o 发帖数: 1252 | 71 没用过Haskell,你解释一下内部是怎么实现的,难道每个fibo n都是一个type?
C/C++/Java里面fibo要是一个函数的话,n大一点那是跑不出结果的。
【在 G***l 的大作中提到】 : 你想说什么? : Haskell: : fibo 0 = 0 : fibo 1 = 1 : fibo n = fibo (n-1) + fibo (n-2)
|
G***l 发帖数: 355 | 72 我只是写了个最简单的。n大的话这个肯定也很慢。得写tail recursion版的。要追求
性能的话,肯定要复杂。但是从数学角度讲递归是很自然的写法。有没有搞compiler的
说说,非tail recursoin有没有可能让compiler做优化,如果能的话,最简单的写法也
能达到效率。
【在 p***o 的大作中提到】 : 没用过Haskell,你解释一下内部是怎么实现的,难道每个fibo n都是一个type? : C/C++/Java里面fibo要是一个函数的话,n大一点那是跑不出结果的。
|
g****r 发帖数: 1589 | 73 算这玩意难道不正是FP的强项吗?
【在 p***o 的大作中提到】 : 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把 : : FP : 的。
|
p***o 发帖数: 1252 | 74 我也觉得应该是,就是不明白具体怎么算的。
【在 g****r 的大作中提到】 : 算这玩意难道不正是FP的强项吗?
|
p***o 发帖数: 1252 | 75 好吧,查了下,还真不如用个loop呢 ...
haskell.org/haskellwiki/The_Fibonacci_sequence
【在 p***o 的大作中提到】 : 我也觉得应该是,就是不明白具体怎么算的。
|
G***l 发帖数: 355 | 76 这个简单的例子当然没什么区别。但是你不觉得recursive的定义比loop更贴近自然思
维吗?再说FP好的地方又不是说他能递归,现在流行的语言都能递归。优点在与是指一
切都是function的一种思维,建模方式,只要你用这种思维方式,斐波那契的例子你自
然就不会去想用循环写。
【在 p***o 的大作中提到】 : 好吧,查了下,还真不如用个loop呢 ... : haskell.org/haskellwiki/The_Fibonacci_sequence
|
g****r 发帖数: 1589 | 77 这种写法应该更接近于数学定义,可读性也强一些,碰到复杂的情况这种写法可能更简
洁一些,不过这个也看各人的喜好了
用尾递归的话,compiler应该会自动编译成loop,性能上区别应该不大
【在 p***o 的大作中提到】 : 好吧,查了下,还真不如用个loop呢 ... : haskell.org/haskellwiki/The_Fibonacci_sequence
|
t****a 发帖数: 1212 | 78 萝卜青菜,各有所爱,不用争了。
--一个铁杆FP用户
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
t***a 发帖数: 416 | 79 他刚才那个fibo写法,在haskell里n大点也跑不出
【在 p***o 的大作中提到】 : 没用过Haskell,你解释一下内部是怎么实现的,难道每个fibo n都是一个type? : C/C++/Java里面fibo要是一个函数的话,n大一点那是跑不出结果的。
|
p*****2 发帖数: 21240 | 80 不太同意LZ。前一段时间研究过尾递归。
http://blog.sina.com.cn/s/blog_b9285de20101i5s1.html
递归本身是很自然的思维,但是你要是转成尾递归的过程就很不自然,跟iteration也
差不多。 |
|
|
n*w 发帖数: 3393 | 81 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。
有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能
attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。 |
p*****2 发帖数: 21240 | 82
有scala怕啥?
【在 n*w 的大作中提到】 : 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。 : 有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能 : attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。
|
n*w 发帖数: 3393 | 83 有时只让用Java
【在 p*****2 的大作中提到】 : : 有scala怕啥?
|
g****t 发帖数: 31659 | 84 Turing诞辰一百年还是怎么回事,普林斯顿弄了个纪念活动.好多图灵奖得主
作报告.
结果好像有个人很不厚道的讲,Lambda calculus会dominate掉图灵机.
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
n*w 发帖数: 3393 | 85 好像不少做programming language研究的人稍微多喜欢一些Lambda calculus。
不过本版有自认大牛可能会重复地说其只不过是语法糖。
【在 g****t 的大作中提到】 : Turing诞辰一百年还是怎么回事,普林斯顿弄了个纪念活动.好多图灵奖得主 : 作报告. : 结果好像有个人很不厚道的讲,Lambda calculus会dominate掉图灵机. : : FP : 的。
|
n******t 发帖数: 4406 | 86 但是大部分实际系统级的开发,这种搞法都会把机器搞死。
其实 FP不是什么新东西。这几年火,还是因为硬件太快同事需要计算的地方
太多的原因。
【在 G***l 的大作中提到】 : 这个简单的例子当然没什么区别。但是你不觉得recursive的定义比loop更贴近自然思 : 维吗?再说FP好的地方又不是说他能递归,现在流行的语言都能递归。优点在与是指一 : 切都是function的一种思维,建模方式,只要你用这种思维方式,斐波那契的例子你自 : 然就不会去想用循环写。
|
n*w 发帖数: 3393 | 87 FP 40 年了。
【在 n******t 的大作中提到】 : 但是大部分实际系统级的开发,这种搞法都会把机器搞死。 : 其实 FP不是什么新东西。这几年火,还是因为硬件太快同事需要计算的地方 : 太多的原因。
|
r*g 发帖数: 3159 | 88 Fp 的竞争对手是过程式编程, 而不是oo。计算性的两大理论图灵状态机和laMbda
calculus是等价的,分别对应过程式和函数式编程。oo是另一层面的东西,不能跟fp做
二选一的比较。 |
r*g 发帖数: 3159 | 89 其实现在这些fp真的只是语法糖而已。解释器编译器还是把它们转成过程式forloop什
么的。
真正在硬件层次上能实现lambda calculus, 不用寄存器了,才是fp的真正逆袭。
【在 p*****2 的大作中提到】 : 不太同意LZ。前一段时间研究过尾递归。 : http://blog.sina.com.cn/s/blog_b9285de20101i5s1.html : 递归本身是很自然的思维,但是你要是转成尾递归的过程就很不自然,跟iteration也 : 差不多。
|
s***o 发帖数: 6934 | 90 when mentioning functional languages, why not include arguably the most
successful one in industry usage, especially distributed computing: Erlang?
Ericsson switches
Riak (this is kicking Cassandra's ass now)
CouchDB
Amazon SimpleDB
rabbitMQ
Ejabberd
IMDB
Facebook chat backend
Whatsapp
...
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
|
|
x****u 发帖数: 44466 | 91 搞死机器的唯一原因是没有搞清瓶颈所在。
12306也不是不能后台用python。
【在 n******t 的大作中提到】 : 但是大部分实际系统级的开发,这种搞法都会把机器搞死。 : 其实 FP不是什么新东西。这几年火,还是因为硬件太快同事需要计算的地方 : 太多的原因。
|
g*****g 发帖数: 34805 | 92 真是无知当有趣。匿名内部类的变量本来就只要local variable是final,instance
variable不需要。就算你非要Local variable
final Wrapper w = new Wrapper(v);
new InnerClass(w) {
// update v
}
v不就能变动了?本来就是一点糖水,加不加都不影响功能。也就你这种鸵鸟在这个问
题上喋喋不休。
【在 n*w 的大作中提到】 : 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。 : 有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能 : attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。
|
y***y 发帖数: 224 | 93
我一直都不明白为啥local variable必须是final...
【在 g*****g 的大作中提到】 : 真是无知当有趣。匿名内部类的变量本来就只要local variable是final,instance : variable不需要。就算你非要Local variable : final Wrapper w = new Wrapper(v); : new InnerClass(w) { : // update v : } : v不就能变动了?本来就是一点糖水,加不加都不影响功能。也就你这种鸵鸟在这个问 : 题上喋喋不休。
|
g*****g 发帖数: 34805 | 94 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄
漏。
final的话,直接拷贝一份就行。
【在 y***y 的大作中提到】 : : 我一直都不明白为啥local variable必须是final...
|
z****e 发帖数: 54598 | 95 这是一个很经典的问题
但是我从来都是绕过它不用匿名类
哦也
【在 y***y 的大作中提到】 : : 我一直都不明白为啥local variable必须是final...
|
z****e 发帖数: 54598 | 96 明白了,原来如此
【在 g*****g 的大作中提到】 : 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄 : 漏。 : final的话,直接拷贝一份就行。
|
z****e 发帖数: 54598 | 97 小菊花你对这种国家层面的系统没经验就不要现了
说一个错一个,真神当时举例都明说了
铁道部这种规模用java,毫无疑问
主要问题都在db那一层上
尤其是transaction
用db2或者oracle的话,websphere/weblogic/jboss就是明摆着的利器你不用
非要自己去手写appserver,就算你牛得一塌糊涂
能搞一个weblogic一样的appserver出来
你也要看看各数据库对于python的支持到了什么程度
python对于db的api多数还停留在手写sql的阶段
不象java,有jdbc,再往上还有jpa和jdo的规范
关于transaction的ejb有完整的一套方法来处理
只需要用annotation就可以很轻松地搞定各种事务之间的合并
不过你用其他语言根本到不了db那一层
在business layer就会让内存爆掉,就你这种水平去手动控制内存的管理
不泄漏才见鬼,不是看不起你,这里估计也没人能真搞定这个东西的
尤其是手写,一不小心就漏了
你还不如告诉我你用python手写一个hadoop也不是不可以
可信度还更高点
不仅是火车票,现在几乎所有的机票也都是java搞的
除了欧洲那家,美帝已经全java了,很多年以前就全java了
最早mit的几个毕业生搞的,client side用的是swing,叹为观止
欧洲那家back end是c++
但是web就是struts那些东西,欧洲那家名字叫做amadeus
这个星球上30%的机票都出自那家公司的系统
不过你这种外行肯定接触不到那么深入的系统
可能做个reseller的programmer,用点他们提供的接口倒是很有可能
不过他们有网站可以查询机票信息,从url就可以看出他们在用什么了
.action,dispatcher,一看就是struts那些东西
【在 x****u 的大作中提到】 : 搞死机器的唯一原因是没有搞清瓶颈所在。 : 12306也不是不能后台用python。
|
h*****4 发帖数: 4219 | 98 课上刚分析过,据说是在anonymous inner class里面,对这个变量的处理其实是当作
常量了,所以要锁定住。
比方说弄了个GUI,在Jlabel那里要显示一个String,当你运行了GUI之后,这个String
就不应该由外界改变了。
【在 n*w 的大作中提到】 : 目前在c#里混着用比较多。FP解放了不少枯燥的机械coding。 : 有读到Java 8的lambda只是目前anonymous inner class的syntactic sugar。还是不能 : attach非final的parent变量。有谁可以确认?这样的话未来Java的fp还是令人失望。
|
h*****4 发帖数: 4219 | 99 re
【在 g*****g 的大作中提到】 : 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄 : 漏。 : final的话,直接拷贝一份就行。
|
n*w 发帖数: 3393 | 100 It's about semantic. 所有语言都会被编译成汇编。按这样的说法oop, logic
programming也是语法糖。不过语法糖有没有一个理论上的严格定义?
随便提醒一下看客,有人给了一个java anonymous inner class的access 非final
variable 的hack. 不要那样用。那不是实现proper closure. it will be a big mess
when it gets a little complex.
【在 r*g 的大作中提到】 : 其实现在这些fp真的只是语法糖而已。解释器编译器还是把它们转成过程式forloop什 : 么的。 : 真正在硬件层次上能实现lambda calculus, 不用寄存器了,才是fp的真正逆袭。
|
|
|
r*g 发帖数: 3159 | 101 高层次的FP我看来都是语法糖而已。但FP也可以一直到底层。例如直接作labmda
calculus的硬件,象
http://en.wikipedia.org/wiki/Graph_reduction_machine
mess
【在 n*w 的大作中提到】 : It's about semantic. 所有语言都会被编译成汇编。按这样的说法oop, logic : programming也是语法糖。不过语法糖有没有一个理论上的严格定义? : 随便提醒一下看客,有人给了一个java anonymous inner class的access 非final : variable 的hack. 不要那样用。那不是实现proper closure. it will be a big mess : when it gets a little complex.
|
d****i 发帖数: 4809 | 102 都会被编译成汇编? Native的C/C++编译后难道不是0101的机器码吗?
mess
【在 n*w 的大作中提到】 : It's about semantic. 所有语言都会被编译成汇编。按这样的说法oop, logic : programming也是语法糖。不过语法糖有没有一个理论上的严格定义? : 随便提醒一下看客,有人给了一个java anonymous inner class的access 非final : variable 的hack. 不要那样用。那不是实现proper closure. it will be a big mess : when it gets a little complex.
|
w******p 发帖数: 166 | 103 recursive Fibonacci in python, gets 100th within a second:
def fibgen(n, f1, f2):
if n==0: return f1+f2
return fibgen(n-1, f2, f1+f2)
print fibgen(100,0,1)
【在 p***o 的大作中提到】 : 不是说FP不好,你先谈谈怎么用递归算Fibonacci数列,比如说第100项把 : : FP : 的。
|
n*w 发帖数: 3393 | 104 You are right. Machine code is more precise.
【在 d****i 的大作中提到】 : 都会被编译成汇编? Native的C/C++编译后难道不是0101的机器码吗? : : mess
|
E*****m 发帖数: 25615 | 105 Erlang 的massive multi-thread 超強, 但是語法實在太糟糕了。
不知道 Akka 這些技術是不是趕上 Erlang virtual machine 了。
【在 s***o 的大作中提到】 : when mentioning functional languages, why not include arguably the most : successful one in industry usage, especially distributed computing: Erlang? : Ericsson switches : Riak (this is kicking Cassandra's ass now) : CouchDB : Amazon SimpleDB : rabbitMQ : Ejabberd : IMDB : Facebook chat backend
|
d********g 发帖数: 10550 | 106 数字大了不行,recursion无优化算不出fib(1000),而且效率很低。有个矩阵的解法还
可以:
def _mul(A, B):
a, b, c = A
d, e, f = B
return a * d + b * e, a * e + b * f, b * e + c * f
def _pow(A, n):
if n == 1:
return A
elif n & 1 == 0:
return _pow(_mul(A, A), n // 2)
else:
return _mul(A, _pow(_mul(A, A), (n - 1) // 2))
def fib(n):
return n if n < 2 else _pow((1, 1, 0), n - 1)[0]
普通笔记本算fib(1000000)也就一两秒
【在 w******p 的大作中提到】 : recursive Fibonacci in python, gets 100th within a second: : def fibgen(n, f1, f2): : if n==0: return f1+f2 : return fibgen(n-1, f2, f1+f2) : print fibgen(100,0,1)
|
r*******n 发帖数: 3020 | 107 非常赞同!
转尾递归就失去了递归带来的好处,还不如loop,
clojure里解决方案是 if 。。。 recur。。。
这种就很好。
【在 p*****2 的大作中提到】 : 不太同意LZ。前一段时间研究过尾递归。 : http://blog.sina.com.cn/s/blog_b9285de20101i5s1.html : 递归本身是很自然的思维,但是你要是转成尾递归的过程就很不自然,跟iteration也 : 差不多。
|
s***o 发帖数: 6934 | 108 you are absolutely right, erlang就是语法太烂, 但otp实在太强大了
最终jvm上的Akka这些肯定会赶上的,时间问题。但也有可能发展不了那么长时间又有
新东西了。
【在 E*****m 的大作中提到】 : Erlang 的massive multi-thread 超強, 但是語法實在太糟糕了。 : 不知道 Akka 這些技術是不是趕上 Erlang virtual machine 了。
|
z****e 发帖数: 54598 | 109 如果你们说语法的话,显然应该说scala,而不是akka
akka哪有什么语法,无非一堆jars而已
【在 s***o 的大作中提到】 : you are absolutely right, erlang就是语法太烂, 但otp实在太强大了 : 最终jvm上的Akka这些肯定会赶上的,时间问题。但也有可能发展不了那么长时间又有 : 新东西了。
|
s***o 发帖数: 6934 | 110 the counter part of Akka is not the erlang language but its concurrent model
.
【在 z****e 的大作中提到】 : 如果你们说语法的话,显然应该说scala,而不是akka : akka哪有什么语法,无非一堆jars而已
|
|
|
p*****2 发帖数: 21240 | 111
好像scala里也有个类似的。不过本来也没有禁止for while
【在 r*******n 的大作中提到】 : 非常赞同! : 转尾递归就失去了递归带来的好处,还不如loop, : clojure里解决方案是 if 。。。 recur。。。 : 这种就很好。
|
z****e 发帖数: 54598 | 112 也不是model吧
akka是具体的实现,而model还只是一个概念
model
【在 s***o 的大作中提到】 : the counter part of Akka is not the erlang language but its concurrent model : .
|
c*********e 发帖数: 16335 | 113 en,oop有优点也有缺点,缺点就是,什么东西都是一个object,一个object就象一个大
包裹,占用大量内存,这样scalability就会有问题。比如同时有1千万个用户登录一个
网站做交易,那就要有1千万个java beans来为每一个用户服务,非常占内存。同时,每
个用户都要做数据库交易。这样,就显出oop的缺点。现在做memory database火起来,
可能就是基于这方面的原因。
FP
的。
【在 G***l 的大作中提到】 : Functional Programming这几年来越来越热。 最近几年FP开始流行。众多纯FP或者FP : 为主的语言出现,比如haskell, clojure, ocaml, f#等等。 很多非FP的语言都不约而 : 同的加入一定的FP功能,C#,C++,Java(将要)。很多一定程度支持FP的比如Python, : Ruby之类也很流行。 : FP好用吗?答案是肯定的。Emacs和它所有的插件都是lisp写的,Emacs多牛逼这里就不 : 多说了。工业界的例子,华尔街著名的高频交易公司Jane Stree Capital的系统就是 : OCaml写的,这种系统不管是的复杂性,可扩展性还是,可靠性和性能要求都是很高的。 : FP的优点在哪里?wiki的词条上面列了一些fp的特性和优点,我就不赘述了。下面说一 : 些我的个人体验。水平有限,思维比较杂乱,大家见谅。 : 写程序,不管是过程式,OO还是fp,说到底是还是数据和算法。过程式样的思维,你会
|
s****0 发帖数: 117 | 114 memory database火和oop没关系。
忘了原话怎么说的,意思是现代的硬件技术没有被充分利用,所以数据库需要重新设计
。voltDB
,每
【在 c*********e 的大作中提到】 : en,oop有优点也有缺点,缺点就是,什么东西都是一个object,一个object就象一个大 : 包裹,占用大量内存,这样scalability就会有问题。比如同时有1千万个用户登录一个 : 网站做交易,那就要有1千万个java beans来为每一个用户服务,非常占内存。同时,每 : 个用户都要做数据库交易。这样,就显出oop的缺点。现在做memory database火起来, : 可能就是基于这方面的原因。 : : FP : 的。
|
s***o 发帖数: 6934 | 115 i think you got the point...
【在 z****e 的大作中提到】 : 也不是model吧 : akka是具体的实现,而model还只是一个概念 : : model
|
g*****g 发帖数: 34805 | 116 Memory is rarely the issue with high concurrency system. Memory is too cheap
these days. Put 100 instances, each serving 100K users, with 100K Bytes for
each user session, it's only 10G memory for each instance, easily handled
by a moderate server node.
,每
【在 c*********e 的大作中提到】 : en,oop有优点也有缺点,缺点就是,什么东西都是一个object,一个object就象一个大 : 包裹,占用大量内存,这样scalability就会有问题。比如同时有1千万个用户登录一个 : 网站做交易,那就要有1千万个java beans来为每一个用户服务,非常占内存。同时,每 : 个用户都要做数据库交易。这样,就显出oop的缺点。现在做memory database火起来, : 可能就是基于这方面的原因。 : : FP : 的。
|
s***o 发帖数: 6934 | 117 comparing to memory, CPU is even cheaper
cheap
for
【在 g*****g 的大作中提到】 : Memory is rarely the issue with high concurrency system. Memory is too cheap : these days. Put 100 instances, each serving 100K users, with 100K Bytes for : each user session, it's only 10G memory for each instance, easily handled : by a moderate server node. : : ,每
|
g*****g 发帖数: 34805 | 118 Not really, you have limited upside on additional CPU on a rack. Plus, many
servers charge license fee by CPU power. NoSQL is not very necessary if
scaling up is cheap.
【在 s***o 的大作中提到】 : comparing to memory, CPU is even cheaper : : cheap : for
|
E*****m 发帖数: 25615 | 119
Scala 語法比 Erlang 好點, 但是不上 Akka 不能和
Erlang 的長處競爭。
你是不是認真的以為我們都不知道 Akka 不是個語言?
那你太累了。
【在 z****e 的大作中提到】 : 如果你们说语法的话,显然应该说scala,而不是akka : akka哪有什么语法,无非一堆jars而已
|
y***y 发帖数: 224 | 120
多谢!
您的这个解释我明白,之前看到过.
可我还是不懂, 为啥只有加final之后才可以拷贝一份? 就设计成传给匿名类的时候就
是拷贝一份不行么?
【在 g*****g 的大作中提到】 : 因为匿名内部类的生命周期可以超过本地变量,从而导致函数返回时栈去不掉,内存泄 : 漏。 : final的话,直接拷贝一份就行。
|
|
|
n*w 发帖数: 3393 | 121 Good question. It's more like a design "choice".
【在 y***y 的大作中提到】 : : 多谢! : 您的这个解释我明白,之前看到过. : 可我还是不懂, 为啥只有加final之后才可以拷贝一份? 就设计成传给匿名类的时候就 : 是拷贝一份不行么?
|
g*****g 发帖数: 34805 | 122 不final拷贝之后没法保持数据一致。
【在 y***y 的大作中提到】 : : 多谢! : 您的这个解释我明白,之前看到过. : 可我还是不懂, 为啥只有加final之后才可以拷贝一份? 就设计成传给匿名类的时候就 : 是拷贝一份不行么?
|
z****e 发帖数: 54598 | 123 这个玩意除了电信业以外其他行业都未经过检验
可能也就是网络游戏里面有几个在用
象我们这种理论上比较适合上akka的,都没有用上
不用说其它行业了,出来的时间有些迟了
另外你装傻又不是一天两天了
【在 E*****m 的大作中提到】 : : Scala 語法比 Erlang 好點, 但是不上 Akka 不能和 : Erlang 的長處競爭。 : 你是不是認真的以為我們都不知道 Akka 不是個語言? : 那你太累了。
|
n*w 发帖数: 3393 | 124 Java之父James Gosling的原话:
"Closures were left out of Java initially more because of time pressures
than anything else. In the early days of Java the lack of closures was
pretty painful, and so inner classes were born: an uncomfortable compromise
that attempted to avoid a number of hard issues. But as is normal in so many
design issues, the simplifications didn't really solve any problems, they
just moved them."
只是closure 的语法糖的话就不会有 “didn't really solve any problems, they
just moved them."这样的话。
【在 n*w 的大作中提到】 : Good question. It's more like a design "choice".
|
a*****e 发帖数: 1700 | 125 goodbug 对语法糖的这个词有他自己的定义,你也不要太纠结了
compromise
many
【在 n*w 的大作中提到】 : Java之父James Gosling的原话: : "Closures were left out of Java initially more because of time pressures : than anything else. In the early days of Java the lack of closures was : pretty painful, and so inner classes were born: an uncomfortable compromise : that attempted to avoid a number of hard issues. But as is normal in so many : design issues, the simplifications didn't really solve any problems, they : just moved them." : 只是closure 的语法糖的话就不会有 “didn't really solve any problems, they : just moved them."这样的话。
|
a*****e 发帖数: 1700 | 126 这个转换叫 worker/wrapper transformation,可以把上面那个 fib 的定义自动转换
为尾递归。
见 http://www.cs.nott.ac.uk/~gmh/wrapper.pdf 第六节。
【在 G***l 的大作中提到】 : 我只是写了个最简单的。n大的话这个肯定也很慢。得写tail recursion版的。要追求 : 性能的话,肯定要复杂。但是从数学角度讲递归是很自然的写法。有没有搞compiler的 : 说说,非tail recursoin有没有可能让compiler做优化,如果能的话,最简单的写法也 : 能达到效率。
|
z****e 发帖数: 54598 | 127 你是不是回错了?
他们已经在说另外一个东西了
【在 a*****e 的大作中提到】 : goodbug 对语法糖的这个词有他自己的定义,你也不要太纠结了 : : compromise : many
|
g*****g 发帖数: 34805 | 128 什么叫做我自己的定义。我把wiki上的定义都拿出来了。
【在 a*****e 的大作中提到】 : goodbug 对语法糖的这个词有他自己的定义,你也不要太纠结了 : : compromise : many
|
a*****e 发帖数: 1700 | 129 没错啊,我就是劝 nkw 想开一点,不要老是纠结在 closure 和 inner class 的差别
了,
反正 goodbug 认为没差别,就算有差别,也是糖水的差别
【在 z****e 的大作中提到】 : 你是不是回错了? : 他们已经在说另外一个东西了
|
n*w 发帖数: 3393 | 130 我不在乎个别id怎么认为,根本放弃和某id讨论了。正好偶然看到James的这段和前面
几个帖子的内容相关就贴上来了。
能搞个投票就好了,我很好奇有多少读过这些讨论的人还认为closure 和 inner class
没差别或只是糖水的差别。
【在 a*****e 的大作中提到】 : 没错啊,我就是劝 nkw 想开一点,不要老是纠结在 closure 和 inner class 的差别 : 了, : 反正 goodbug 认为没差别,就算有差别,也是糖水的差别
|
|
|
g*****g 发帖数: 34805 | 131 好奇有啥用。你觉得不能实现的实现给你看了。糖水的定义在wiki上,还死不承认就是
极品了。
class
【在 n*w 的大作中提到】 : 我不在乎个别id怎么认为,根本放弃和某id讨论了。正好偶然看到James的这段和前面 : 几个帖子的内容相关就贴上来了。 : 能搞个投票就好了,我很好奇有多少读过这些讨论的人还认为closure 和 inner class : 没差别或只是糖水的差别。
|
n*w 发帖数: 3393 | 132 Troll, 自己再读下wiki和以前关于Wiki那段的讨论,及James的那段。又精确地描叙了
自己。
【在 g*****g 的大作中提到】 : 好奇有啥用。你觉得不能实现的实现给你看了。糖水的定义在wiki上,还死不承认就是 : 极品了。 : : class
|
g*****g 发帖数: 34805 | 133 james的话还成为救命稻草了?你小真是够极品的,james说的是java语言的设计有一些
compromise,几乎所有的语言都有很多compromise。哪里提到closure相比inner class
不是糖水了?你觉得不能实现的,我都实现给你看了,你还jjww有完没完?
【在 n*w 的大作中提到】 : Troll, 自己再读下wiki和以前关于Wiki那段的讨论,及James的那段。又精确地描叙了 : 自己。
|
n*w 发帖数: 3393 | 134 Troll. 不断重复着。
class
【在 g*****g 的大作中提到】 : james的话还成为救命稻草了?你小真是够极品的,james说的是java语言的设计有一些 : compromise,几乎所有的语言都有很多compromise。哪里提到closure相比inner class : 不是糖水了?你觉得不能实现的,我都实现给你看了,你还jjww有完没完?
|
d*******r 发帖数: 3299 | 135 这个自动变换看起来很有意思的样子,怎么没人讨论了.
【在 a*****e 的大作中提到】 : 这个转换叫 worker/wrapper transformation,可以把上面那个 fib 的定义自动转换 : 为尾递归。 : 见 http://www.cs.nott.ac.uk/~gmh/wrapper.pdf 第六节。
|