1.
归并排序(merge sort) 也叫做黑帮排序或者融合排序
比起其他得排序算法略显复杂,采用divide and conquer得思想
先将牌均匀地分为两部分呢,将这两部分分别用归并排序算法排序,然后用一个函数将这两ta有序得牌合并为yi ta 有序的牌。
当用规避那个排序排那两部分的时候,实际上是又将这两部分牌继续均分,然后递归地使用这个排序方法,递归的基本体哦阿健是一张牌自己是有序的额,
把它们均匀的分成两组
应用mergesort
mergesort
one of the most efficient sorting algorithms
it is based on the divide-conquer思想
3.
考拉兹猜想(Collatz conjecture,也有译作奇偶归一猜想)
chpter 6 列表内包 list comprehension的内包(comprehension)
4.
埃拉托斯特尼筛法(Eratosthenes sieve)快速生成素数的方法
5.
对称的symmetric
列表内容在使用起来非常低清晰明了。在生成各种列表时,有利欸包内包还有基于里欸博爱的递归我们可以很轻易地应对各种问题,这要归公与里欸博爱的而灵活性还有haskell怼列表内保定制的精致的的语法。
这种表达法在后边的内容中常常遇到,
chapter 7 高阶函数
higher order function
以其他函数为参数的函数,或者以函数作为结果返回的函数成为高阶函数
与有函数作为返回结果只是柯里化函数的特点而已,所以高阶函数常常仅特定那些以函数为参数的函数
fix 1 :: (a-> a) -> a fix1 f = f (fix1 f) fix 2 :: Eq a => (a -> a ) -> a -> a fix 2 f x | x == f x = x | otherwise = fix2 f (f x) fix3 :: (t -> t -> Bool) -> (t -> t) -> t -> t fix 3 c f x | c x (f x) = x | otherwise = fix3 c f (f x)
都是需要类型为(a → a)作参数的函数
6.
snoc
7.
左折叠函数 foldl
mapAccumL 与 mapAccumR 函数: 这两个函数可以理解为,在计算的时候常常需要返回一些状态,比如,在将某个列表在求和的过程中,记录当前的奇偶性
> :m +Data.List > mpaAccumL (\sum -> \a -> (sum + a, even (sum + a))) 0 [1,3,4,5,6] (19, [False, True, True, False, False])
concatMap 函数是很有用的,它的作用是将一个类型为 [a] 用一个函数 f 映射成有着[[b]] 类型的列表,然后再对其使用 concat。使用 foldr 函数与复合函数可以非常容易地定义它。它的定义等价于\f xs -> concat (map f xs),而 concat 是通过 (++) 定义,也就是
在应用 (++) 前再用函数 f 映射一次,这其实就是 (++) 与 f 函数的复合
chapter8 定义数据类型
Haskell 主要使用 data 与 newtype 关键字来定义新的类型。在定义新类型时,可以使用很多种不同的方式
isomorphism 同构
P194