Python, Lisp, Ruby函数式编程的一个小对比


转自[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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据提供的引用内容,LISP是一种编程语言,可以用来进行计算和创建过程。在LISP中,可以使用绘图函数来画出图形。下面是一个使用LISP绘制小老虎的示例代码: ```lisp (define (draw-tiger) (begin (set! r 50) ; 定义半径 (set! angle (/ pi 4)) ; 定义角度 (set! x 0) ; 定义起始点的x坐标 (set! y 0) ; 定义起始点的y坐标 (set! step 10) ; 定义步长 ; 绘制头部 (draw-circle r x y) ; 绘制眼睛 (draw-circle (/ r 5) (+ x (/ r 2)) (+ y (/ r 2))) (draw-circle (/ r 5) (- x (/ r 2)) (+ y (/ r 2))) ; 绘制耳朵 (draw-triangle x y (+ x r) (+ y r) (+ x r) (- y r)) (draw-triangle x y (- x r) (+ y r) (- x r) (- y r)) ; 绘制身体 (draw-rectangle (- x r) (- y r) (+ x r) (+ y r)) ; 绘制尾巴 (draw-line (+ x r) y (+ x r (+ r step)) y) (draw-line (+ x r (+ r step)) y (+ x r (+ r step)) (- y r)) ) ) ; 绘制圆形 (define (draw-circle r x y) (begin (set! angle 0) (while (< angle (* 2 pi)) (begin (set! x1 (+ x (* r (cos angle)))) (set! y1 (+ y (* r (sin angle)))) (set! x2 (+ x (* r (cos (+ angle step))))) (set! y2 (+ y (* r (sin (+ angle step))))) (draw-line x1 y1 x2 y2) (set! angle (+ angle step)) ) ) ) ) ; 绘制矩形 (define (draw-rectangle x1 y1 x2 y2) (begin (draw-line x1 y1 x2 y1) (draw-line x2 y1 x2 y2) (draw-line x2 y2 x1 y2) (draw-line x1 y2 x1 y1) ) ) ; 绘制三角形 (define (draw-triangle x1 y1 x2 y2 x3 y3) (begin (draw-line x1 y1 x2 y2) (draw-line x2 y2 x3 y3) (draw-line x3 y3 x1 y1) ) ) ; 绘制线段 (define (draw-line x1 y1 x2 y2) (begin (print "绘制线段:(" x1 "," y1 ") -> (" x2 "," y2 ")") ) ) ; 调用绘制小老虎函数 (draw-tiger) ``` 这段代码使用LISP语言定义了一个绘制小老虎的函数`draw-tiger`,并在函数中使用其他绘图函数来绘制头部、眼睛、耳朵、身体和尾巴等部分。你可以运行这段代码来绘制一个小老虎。\[1\] #### 引用[.reference_title] - *1* *3* [如何用Python编写一个Lisp解释器](https://blog.csdn.net/weixin_42232219/article/details/98921065)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [小白都会的Python项目实战(附源码)3分钟画一棵圣诞树](https://blog.csdn.net/2201_75614032/article/details/128217813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值