函数式编程心得

函数式编程心得


读了两天 SICP ,谈一谈我对函数式编程的认识。

函数式编程

每一种编程范式,与其说告诉我们能做什么,不如说告诉我们不能做什么。在函数式编程语言Scheme中:

  • 函数没有副作用
  • 没有指针
  • 函数就是打包了的表达式

但这些都是外在的,函数式编程的最大感受是函数式与数学联系紧密。

程序片段对比

最大公约数

python

def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a

scheme

(define (gcd a b)
  (if (= b 0)
      a
      (gcd b (remainder a b))))

python 代码描述了一个流程,当b不为零时,按规则变换a, b,最后返回a。流程非常清晰,但却没有反映语义层面的信息。再看 scheme 的代码,没有了循环流程控制了while,用递归实现迭代,反而突出了语义信息。就算不理解gcd的含义,我们也可以看出 g c d ( a , b ) = g c d ( b , a   m o d   b ) gcd(a,b)=gcd(b,a\ mod\ b) gcd(a,b)=gcd(b,a mod b),而这正是理解程序有效性的关键。


使用scheme,广泛使用递归,很不适应。以前,不到万不得已不用递归,喜欢简单的循环。但现在我对递归有了新的看法,它不只是“咬住自己尾巴的蛇”、“克莱因瓶”、“俄罗斯套娃”——一种可有可无的奇怪用法,而是蕴含程序设计分治思想、能运行的数学语言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值