Programming in Haskell是一本入门Haskell的好书,介绍页面以及配套的slides, vedios, codes都在这里。
定义 halve
1 2
| halve :: [a] -> ([a], [a]) halve a = let n = (length a) `div` 2 in (take n a, drop n a)
|
用三种方式定义safetail
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| safetail1 :: [a] -> [a] safetail1 xs = if null xs then xs else tail xs
safetail2 :: [a] -> [a] safetail2 xs | null xs = xs | otherwise = tail xs
safetail3 :: [a] -> [a] safetail3 [] = [] safetail3 (_:xs) = xs
|
定义并运算(disjunction operator)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| md1 :: Bool -> Bool -> Bool md1 True True = True md1 True False = True md1 False True = True md1 False False = False
md2 False False = False md2 _ _ = True
md3 False b = b md3 True _ = True
md4 a b | a == b = a | otherwise = True
|
用条件表达式(conditional expressions)重新定义并运算
1 2
| mc1 a b = if a == False then False else if b == True then True else False
|
同上一题
1
| mc2 a b = if a == True then b else False
|
用lambda表达式理解函数mult x y z = x * y * z
1
| mult x y z == \x -> (\y -> (\z -> x * y * z))
|