经典的快速排序的实现代码:
quicksort [] = []
quicksort (x:xs) = quicksort [y | y <- xs, y<x ]
++ [x]
++ quicksort [y | y <- xs, y>=x]
嘿嘿,用C/C++来实现的话,需要多少行代码呢? 好像某个人说过:符号才是操纵计算机最有力的武器,有点感觉了。
强大的定义数列的能力
[1,2,3] --简单罗列
[1..10] --定义 数列的简单记法,这种方式可以定义任意等差数列。等比?好像不能这样,不过,办法还是有的。。
[1,3..100] --小于100的奇数
[1,2..] --自然数,注意,这是一个真正的无穷数列,因此,别企图打印出来.
参数绑定,这个还是很强大的,bind差不多类似,不过语法上haskell来得简洁的多了:
inc = (add 1)
inc 5 => 8
不仅仅可以绑定常数,当然的,可以绑定任何类型匹配的函数.
quicksort [] = []
quicksort (x:xs) = quicksort [y | y <- xs, y<x ]
++ [x]
++ quicksort [y | y <- xs, y>=x]
嘿嘿,用C/C++来实现的话,需要多少行代码呢? 好像某个人说过:符号才是操纵计算机最有力的武器,有点感觉了。
强大的定义数列的能力
[1,2,3] --简单罗列
[1..10] --定义 数列的简单记法,这种方式可以定义任意等差数列。等比?好像不能这样,不过,办法还是有的。。
[1,3..100] --小于100的奇数
[1,2..] --自然数,注意,这是一个真正的无穷数列,因此,别企图打印出来.
参数绑定,这个还是很强大的,bind差不多类似,不过语法上haskell来得简洁的多了:
inc = (add 1)
inc 5 => 8
不仅仅可以绑定常数,当然的,可以绑定任何类型匹配的函数.