2007-01-16から1日間の記事一覧

head関数。

リストの先頭の要素を返す。 head [1, 2, 3] head "abc" 結果。 1 'a' 空リストに適用するとエラー発生。 Exception: Prelude.head: empty list

tail関数。

リストの先頭以降の要素を返す。 tail [1, 2, 3] tail "abc" tail [1] 結果。 [2, 3] "bc" [] tail [1] の結果が [] となるのは、リストの末尾には常に空リストという特別な要素があるため。

filter関数。

filter :: (a -> Bool) -> [a] -> [a] 第2引数[a]の要素で(a -> Bool)がTrueの要素のみ集めてリストで返す。 main = print $ filter filterTest ["abc", "de", "f", "gh"] filterTest :: String -> Bool filterTest cs = if length cs == 2 then True else F…

map関数の動作。

main = print $ map square [1, 2, 3] square :: Int -> Int square n = n * n 結果。 [1,4,9] map関数の定義はこんな感じ。 map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = f x : map f xs 始めの定義は空のリストにマッチし、空のリストを返…

コメントの書き方。

--コメント {- コメント -} --は行末まで。 {--}は囲まれている範囲。

concatMap関数。

concat関数とmap関数を一つにまとめた関数。 main = print $ concatMap concatMapTest [1, 2, 3] concatMapTest :: Int -> [Int] concatMapTest n = [n * n] 結果。 [1,4,9]concat関数とmap関数をまとめているということは、 main = print $ concat $ map co…

replicate関数。

第2引数の値を第1引数で指定された数分だけ含むリストを返す。 main = do putStrLn $ replicate 5 'a' print $ replicate 5 1 print $ replicate 0 'a' print $ replicate (-1) 'a' 結果。 aaaaa [1,1,1,1,1] "" ""

concat関数。

リストの要素を連結しリストを返す。 concat ["a", "b", "c"] concat [[1,2], [3], [4,5,6]] concat [[[1,2,3]], [[4]]] それぞれの結果。 "abc" [1,2,3,4,5,6] [[1,2,3],[4]] リストは1つしか減らない点に注意。 一重のリストに対して適用すると concat [1,…

パターンマッチ。

main = putStrLn $ patternTest 2 patternTest :: Int -> String patternTest 1 = "one" patternTest n = "other" 結果。 other 値のパターンによって実行される関数が変化する。 patternTest :: Int -> String patternTest n = "other" patternTest 1 = "on…