Python, Lisp, Ruby函数式编程的一个小对比
2006-08-31 09:38
351 查看
转自[python-chinese]
一个小程序的对比
函数式编程到底有什么用呢? 我想实际的好处就是可以将更好的描述问题本身,而不是描述解决问题的操作步骤。看一个具体的例子:
问题:一个列表;对每一个元素平方;将平方后的数如果除3的余数为1则从列表中除去。
看解决的方法:
1. 传统过程式(Python)
>>> s = [1,2,3]
>>> d = []
>>> for i in s:
if i * i % 3 != 1:
d.append(i * i)
>>> d
[9]
>>>
2. 传统函数式(Lisp)
(remove-if (lambda (n) (= (mod n 3) 1))
(mapcar (lambda (n) (* n n))
'(1 2 3)))
可以看出,函数式的程序很好的对应了我们所提问题的两个步骤,分别用 mapcar, remove-if来实现。不过Lisp的程序确实不太好读,我们用python 和 ruby 来改进一下:
3. Python函数式:
>>> filter(lambda n: n % 3 != 1, map(lambda n:n*n, [1,2,3]))
[9]
4. Ruby 函数式:
[1,2,3].map {|n| n * n}.reject{|n| n % 3 == 1}
=> [9]
经过比较,ruby的最为简洁,而且与问题描述对应的最自然。
--
Welcome to my blog ( about Python , Lisp)
http://albertlee.cublog.cn/
_______________________________________________
python-chinese
Post: send python-chinese@lists.python.cn
Subscribe: send subscribe to python-chinese-request@lists.python.cn
Unsubscribe: send unsubscribe to python-chinese-request@lists.python.cn
Detail Info: http://python.cn/mailman/listinfo/python-chinese
一个小程序的对比
函数式编程到底有什么用呢? 我想实际的好处就是可以将更好的描述问题本身,而不是描述解决问题的操作步骤。看一个具体的例子:
问题:一个列表;对每一个元素平方;将平方后的数如果除3的余数为1则从列表中除去。
看解决的方法:
1. 传统过程式(Python)
>>> s = [1,2,3]
>>> d = []
>>> for i in s:
if i * i % 3 != 1:
d.append(i * i)
>>> d
[9]
>>>
2. 传统函数式(Lisp)
(remove-if (lambda (n) (= (mod n 3) 1))
(mapcar (lambda (n) (* n n))
'(1 2 3)))
可以看出,函数式的程序很好的对应了我们所提问题的两个步骤,分别用 mapcar, remove-if来实现。不过Lisp的程序确实不太好读,我们用python 和 ruby 来改进一下:
3. Python函数式:
>>> filter(lambda n: n % 3 != 1, map(lambda n:n*n, [1,2,3]))
[9]
4. Ruby 函数式:
[1,2,3].map {|n| n * n}.reject{|n| n % 3 == 1}
=> [9]
经过比较,ruby的最为简洁,而且与问题描述对应的最自然。
--
Welcome to my blog ( about Python , Lisp)
http://albertlee.cublog.cn/
_______________________________________________
python-chinese
Post: send python-chinese@lists.python.cn
Subscribe: send subscribe to python-chinese-request@lists.python.cn
Unsubscribe: send unsubscribe to python-chinese-request@lists.python.cn
Detail Info: http://python.cn/mailman/listinfo/python-chinese
相关文章推荐
- Python, Lisp, Ruby函数式编程的一个小对比
- <转> amazon的一个大牛谈各种语言 c c++ java python ruby lisp perl
- python的requests类库(一)requests库和urllib包对比:一个简单get请求
- amazon的一个大牛谈各种语言,包括c、c++、java、python、ruby、lisp、perl(翻译后的中文版)
- python的一个对比
- 一个python的文件对比脚本
- python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!
- python应用中一个具体问题的效率对比
- amazon的一个大牛谈各种语言,包括c、c++、java、python、ruby、lisp、perl 中文版
- 用Python编写一个简单的Lisp解释器的教程
- 如何使用Python编写一个Lisp解释器
- java与python性能对比,差一个数量级
- amazon的一个大牛谈各种语言,包括c、c++、java、python、ruby、lisp、perl
- 【转】amazon的一个大牛谈各种语言,包括c、c++、java、python、ruby、lisp、perl 中文版
- 使用Python实现一个文本对比报告生成工具
- 一个批量转换文件编码的python脚本
- 用Python写一个简单的监控系统
- 杭州:一个python的工作机会
- 动态语言Ruby、Python源码对比分析日记(一)
- 用Python写一个文本转HTML的脚本