初識Haskell 四:函數function之二 常見函數

Discrete Mathematics Using a Computer的第一章Introduction to Haskell進行總結。環境Windows,關於函數的部分太長了,分開寫。函數


 經常使用的對列表list操做的函數common functions on listsspa

length :: [a] -> Int  --返回list中元素的數量blog

or :: [Bool] -> Bool --對Bool的list中的全部元素進行||,若是有True,則時Trueip

and :: [Bool] -> Bool --對Bool的list中的全部元素進行&&,若是有False,則Falseit

(!!) :: [a] -> Int -> a --返回指定下標的元素,下標從0開始,如:io

  [1, 2, 3] !! 0 => 1for循環

  "abcde" !! 2 => 'c'ast

elem :: Eq a => a -> [a] -> Bool --判斷該元素是否在list中,在則True,再也不則Falsefunction

null :: [a] -> Bool --判斷list是否爲空,空則True,非空則Falseclass

head 和 tail對list[1,2,3,4,5,6,7,8,9,10]的結果是:

      1    [2, 3, 4, 5, 6, 7, 8, 9, 10]
  head --' <--------------tail-------------->

last 和 init對list[1,2,3,4,5,6,7,8,9,10]的結果是:

    [1, 2, 3, 4, 5, 6, 7, 8, 9]    10
  <---------------init------------> '-- last

take :: Int -> [a] -> [a] --從list中取出指定數量的元素,如:

  take 0 [1, 2, 3] => []

  take 2 [1, 2, 3] => [1, 2]

drop :: Int -> [a] -> [a] --從list中去除指定數量的元素,如:

  drop 2 [1, 2, 3] => [3]

  drop 0 [1, 2, 3] => [1, 2, 3]

(++) :: [a] -> [a] -> [a] --將兩個相同類型的list鏈接在一塊兒,如:

  [1, 2] ++ [3, 4, 5] => [1, 2, 3, 4, 5]

  [] ++ "abc" => "abc"

map :: (a -> b) -> [a] -> [b] --將本來只對一個元素應用的操做,應用到該list的全部元素中,相似於C的for循環。如:

  map toUpper "the cat and dog" => "THE CAT AND DOG"

  map (* 10) [1, 2, 3] => [10, 20, 30]

filter :: (a -> Bool) -> [a] -> [a] --將list中結果爲False的篩選除去留下結果爲True的元素,如:

  

zip :: [a] -> [b] -> [(a, b)] --分別從[a]和[b]中取出元素兩兩配對pair(2-tuples),一方用完後,另外一方剩餘的捨棄掉,如:

  

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] --分別從[a]和[b]中取出元素做爲a的參數,多餘的捨棄。如:

  

 fold function: 和map相似,但結果是一個值,有3個參數:操做符 a list。a做爲默認值,該函數是從a和list的一個元素進行操做符計算而後和下一個list中的元素進行操做,最終得出一個值,分爲foldl和foldr對應了從list的不一樣方向進行操做。由於有a的存在保證的對空list也能進行操做,其結果就是a。

foldl :: (a -> b -> b) -> b -> [a] -> b  {-

  從[a]的左端開始進行操做, 如 foldl (-) a [p, q, r, s]

                                                                     (-) a p    ------------1 注意a在左側

                                                          (-) (          ) q -----------2

                (-) (                    ) r --------3

              (-)  (                               ) s ----4

  -}

foldr :: (a -> b -> b) -> b -> [a] -> b {-

  從[a]的右端開始進行操做, 如 foldr (-) a [p, q, r, s]

                                                                          (-) s a --------1 注意a在右側

                          (-) r (           ) -------2

                   (-) q (                       ) ----3

                                                         (-) p (                                  ) ---4

    -}

   

 操做(the composition operator),至關於連續進行2個函數操做:函數2.函數1 a ,先執行函數1 a,再將其結果做爲函數2的參數。如:

  

相關文章
相關標籤/搜索