Why Functional Programming Matters

乘着看 Haskell 的机会回头又读了一遍 Why Functional Programming Matters。

“It is a logical impossibility to make a language more powerful.”
这句话有些意思。函数式编程并不是由于取消了赋值语句而更强大,而是因为高阶函数和惰性求值的引入,使得函数拥有了更强的抽象表现能力,使程序有了更新颖的模块化方式;正如结构化编程并不是去掉了goto,而是加入结构化语句,使得程序的模块化更为清晰。另一个类比是 Java 并不是因为放弃了内存操作,而是由于引进了垃圾回收机制而提高了编程效率。同样是 Java,没有多重继承就只能说是缺点。

即使在实际应用中不打算使用函数式编程语言,它的一些想法仍然有着启示作用。
比如 Google 的 MapReduce 的抽象模式便是由函数式编程的 map 和 reduce 启发的,而其库实现则完全是指令式编程语言 C++。

Haskell 下,reduce 的命令是 foldl。于是,

> let sum = foldl (+) 0
> sum [1,2,3,4]
10
> let sum_of_square = (foldl (+) 0).(map (^2))
> sum_of_square [1,2,3,4]
30

这是对列表结构进行运算,类似的也可以对树结构进行运算。
如果要对 map 步骤使用并行计算的话,只要加入 Parallel 模块,然后把 map 换成 parMap 就行了。

 

写完不久就在另一篇 blog Research in Programming Languages 里看到对 Haskell 是否真能提高编程效率的保留意见。重点还是如 “In God we trust; all others must bring data.” 所言,没有能够给出足够的数据作为证据。

Advertisements
This entry was posted in Computer and Internet, Programming and Algorithm and tagged , . Bookmark the permalink.

One Response to Why Functional Programming Matters

  1. hang says:

    orz仍然没看懂,太牛逼了,拜你为师

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s