加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

编程的宗派

发布时间:2016-01-12 11:19:59 所属栏目:语言 来源:简书网
导读:总是有人喜欢争论这类问题,到底是“函数式编程”(FP)好,还是“面向对象编程”(OOP)好。既然出了两个帮派,就有人积极地做它们的帮众,互相唾骂和鄙视。然后呢又出了

对数据结构的忽视

函数式语言的帮众没有看清楚的另一个重要的,致命的东西,是数据结构的根本性和重要性。数据结构的有些问题是“物理”和“本质”地存在的,不是换个语言或者换个风格就可以奇迹般消失掉的。函数式语言的拥护者们喜欢盲目的相信和使用列表(list),而没有看清楚它的本质以及它所带来的时间复杂度。列表带来的问题,不仅仅是编程的复杂性。不管你怎么聪明的使用它,很多性能问题是根本没法解决的,因为列表的拓扑结构根本就不适合用来干有些事情!

从数据结构的角度看,Lisp所谓的list就是一个单向链表。你必须从上一个节点才能访问下一个,而这每一次“间接寻址”,都是需要时间的。在这种数据结构下,很简单的像length或者append之类函数,时间复杂度都是O(n)!为了绕过这数据结构的不足,所谓的“Lisp风格”告诉你,不要反复append,因为那样复杂度是O(n2)。如果需要反复把元素加到列表末尾,那么应该先反复cons,然后再reverse一下。很可惜的是,当你同时有递归调用,就会发现cons+reverse的做法颠来倒去的,非常容易出错。有时候列表是正的,有时候是反的,有时候一部分是反的…… 这种方式用一次还可以,多几层递归之后,自己都把自己搞糊涂了。好不容易做对了,下次修改可能又会出错。然而就是有人喜欢显示自己聪明,喜欢自虐,迎着这类人为制造的“困难”勇往直前 :)

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读