函数式编程几种常用技术

函数式编程几种常用技术:

参考《High Order Perl》《程序设计方法》、《S.I.C.P》

用python 代码表示 (另:python对函数式编程支持不好)

1. map & reduce 等操作列表。

print map(lambda x: x.upper(), ["funtional", "programming"])
#输出 [’FUNCTIONAL‘, ’PROGRAMMING‘]
print reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
#输出 15
reduce执行过程:
[1, 2, 3, 4, 5]
   [3, 3, 4, 5]
      [6, 4, 5]
        [10, 5]
             15


2. pipeline
类似unix的shell常用的手法
ps aux | awk '{print $2}' | sort -n | xargs echo
如果用函数式编程的方式表达:
xargs(  echo, sort('-n', awk('print $2', ps('aux')))  )


def even_filter(nums):
    return filter(lambda x: x%2==0, nums)
 
def multiply_by_three(nums):
    return map(lambda x: x*3, nums)
 
def convert_to_string(nums):
    return map(lambda x: 'The Number: %s' % x,  nums)
 
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def pipeline_func(data, fns):
    return reduce(lambda a, x: x(a),
                  fns,
                  data)

print pipeline_func(nums, [even_filter,
                     multiply_by_three,
                     convert_to_string])

# or 这种写法在lisp多见。
print convert_to_string(
      multiply_by_three
         (even_filter(nums)))

3. currying

def curry(x, argc=None):
    if argc is None:
        argc = x.func_code.co_argcount
    def p(*a):
        if len(a) == argc:
            return x(*a)
        def q(*b):
            return x(*(a + b))
        return curry(q, argc - len(a))
    return p

@curry
def myfun(a,b,c):
    print '%d-%d-%d' % (a,b,c)

myfun(11,22,33)
myfun(44,55)(66)
myfun(77)(88)(99)

(待续)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值