Last active
August 29, 2015 14:18
-
-
Save HiroshiOkada/e5d86cbb7f194243d2fb to your computer and use it in GitHub Desktop.
「すごいHaskellたのしく学ぼう!」を読んでいて出てきた関数のメモ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- ■ Prelude | |
5 + 2 == 8 | |
5 * 2 == 10 | |
5 - 2 == 3 | |
5 / 2 == 2.5 | |
( True || False ) == True | |
( True && False ) == False | |
not True == False | |
succ 'c' == 'd' | |
min 4 5 == 4 | |
max 'a' 'z' == 'z' | |
div 92 3 == 30 | |
mod 14 5 == 4 | |
[1,2,3] ++ [4,5] == [1,2,3,4,5] | |
'a':" long time" == "a long time" | |
"abcdef" !! 2 == 'c' | |
( [1,2,3] < [1,2,4] ) == True | |
( "bbc" > "abc" ) == True | |
( [1,2,3] <= [1,2,4] ) == True | |
( "bbc" >= "abc" ) == True | |
( "abc" == "abc" ) == True | |
(1.0 /= 1.5) == True | |
head [1..] == 1 | |
tail [1,2,3] == [2,3] | |
init [1,2,3,4] == [1,2,3] | |
length ['a'..'z'] == 26 | |
null [] == True | |
reverse [1,2,3] == [3,2,1] | |
take 3 [1..] == [1,2,3] | |
drop 7 [1..10] == [8,9,10] | |
maximum [1,10,2] == 10 | |
minimum [3,2,4] == 2 | |
sum [1,10,100] == 10 | |
product [2,3,4] == 24 | |
elem 4 [1,2,3,4,5] == True | |
take 10 ( cycle "abc") == "abcabcabca" | |
take 5 ( repeat 'x') == "xxxxx" | |
replicate 5 'x' == "xxxxx" | |
odd 5 == True | |
even 8 == True | |
fst (1,'A') == 1 | |
snd (1,'A') == 'A' | |
zip [1..] "ABC" == [(1,'A'),(2,'B'),(3,'C')] | |
show 4.25 == "4.25" | |
(read "4" :: Int) == 4 | |
(reads "4kg" :: [(Int,String)]) == [(4,"kg")] | |
(minBound :: (Bool, Int, Char)) == (False,-9223372036854775808,'\NUL') | |
(maxBound :: (Bool, Int, Char)) == (True,9223372036854775807,'\1114111') | |
fromIntegral (div 5 3) + 1.5 == 2.5 | |
compare 1 2 == LT | |
zipWith (*) [1..3] [10,20,30] == [10,40,90] | |
flip (++) "DEF" "ABC" == "ABCDEF" | |
map (10-) [1..3] == [9,8,7] | |
filter (<3) [1..10] == [1,2] | |
takeWhile (/= 'd') "abracadabra" == "abraca" | |
foldl (-) 10 [1,2] == 7 | |
foldr (-) 10 [1,2] == 9 | |
foldl1 (-) [10,1,2] == 7 | |
foldr1 (-) [1,2,10] == 9 | |
and [True, False, True] == False | |
or [True, False, True] == True | |
scanl (+) 0 [1,2,3] == [0,1,3,6] | |
scanr (+) 0 [1,2,3] == [6,5,3,0] | |
scanl1 (+) [1,2,3] == [1,3,6] | |
scanr1 (+) [1,2,3] == [6,5,3] | |
abs (-9) == 9 | |
sqrt 9 == 3.0 | |
negate 3.0 == -3.0 | |
negate $ sqrt $ abs (-9) == -3.0 | |
(negate . sqrt . abs) (-9) == -3.0 | |
id "itself" == "itself" | |
fmap (+1) [1,2,3] == [2,3,4] | |
fmap (+1) (Just 100) == Just 101 | |
words "I don't like it!" == ["I","don't","like","it!"] | |
unwords ["A","big","dog"] == "A big dog" | |
lines "\naa\nbb\n" == ["","aa","bb"] | |
unlines unlines ["x","y"] == "x\ny\n" | |
undefined -- 例外を発生させる | |
concat [[1,2],[3,4],[5,6]] == [1,2,3,4,5,6] | |
(.) (*2) read "10" == 20 -- (.) は関数合成 | |
-- ■ リスト操作 | |
import qualified Data.List as List | |
List.nub "abracadabra" == "abrcd" | |
List.sort [9,8..0] == [0,1,2,3,4,5,6,7,8,9] | |
List.group "aaabbcca" == ["aaa","bb","cc","a"] | |
List.tails [1,2,3] == [[1,2,3],[2,3],[3],[]] | |
List.isPrefixOf "Hi" "Hiroshi!" == True | |
List.any (== 'c') "abcdef" == True | |
List.isInfixOf "abc" "xxabcyy" == True | |
List.foldl' -- foldl の正格(Strict evaluation)版 | |
List.foldr' -- foldr の正格(Strict evaluation)版 | |
List.find (== 0) [1,2,3] == Nothing | |
List.delete 'c' "abcabc" == "ababc" | |
-- ■ 文字操作 | |
import qualified Data.Char as Char | |
Char.ord 'A' == 65 | |
Char.chr 97 == 'a' | |
Char.digitToInt '2' == 2 | |
Char.toUpper 'a' == 'A' | |
-- ■ マップ | |
import qualified Data.Map as Map | |
Map.fromList [(1,"One"), (2,"Two")] == fromList [(1,"One"),(2,"Two")] | |
Map.lookup 2 $ Map.fromList [(1,"A"), (2,"B")] == Just "B" | |
Map.fromListWith (+) [("A",1),("B",2),("A",3)] == fromList [("A",4),("B",2)] | |
import qualified Data.List as List | |
Directory.removeFile ファイル名 | |
Directory.renameFile 元の名前 新しい名前 | |
-- ■ 乱数 | |
import qualified System.Random as Rand | |
Rand.random 乱数ジェネレーター | |
-- 乱数と、新しい乱数ジェネレータを返す | |
Rand.mkStdGen 乱数の種となるInt型の数 | |
-- StdGen型の乱数ジェネレータを返す | |
Rand.randoms 乱数ジェネレータ | |
-- 無限長の乱数のリスト返す | |
Rand.randomR (下限値,上限値) 乱数ジェネレータ | |
-- 下限値と上限値の間の乱数と、新しい乱数ジェネレータを返す | |
Rand.randomRs (下限値,上限値) 乱数ジェネレータ | |
-- 下限値と上限値の間の無限長の乱数のリストを返す | |
stdGen <- Rand.getStdGen | |
-- グローバル乱数ジェネレータを初期化する。 | |
stdGen' <- Rand.newStdGen | |
-- 新しい乱数ジェネレータを返し、グローバル乱数ジェネレータを更新する | |
-- ■ データ型 | |
data Bool = True | Flase | |
data Maybe a = Nothing | Just a | |
data Either a b = Left a | Right a | |
-- ■ IO | |
import qualified Control.Monad as Monad | |
import qualified System.IO as IO | |
import qualified Control.Exception as Ex | |
import qualified System.Environment as Env | |
putStrLn 文字列 -- 文字列出力+改行 | |
putStr 文字列 -- 文字列出力 | |
putChar 文字 -- 一文字出力 | |
s <- getLine -- 一行読み込み改行は削除 | |
print 値 -- 値を文字列化(show)して出力 | |
sequence IOアクションリスト -- IOアクションのリストを順に実行、結果のリストを返す | |
mapM IOを返す関数 リスト -- map の IO を返す関数版 | |
mapM_ IOを返す関数 リスト -- mapM の結果を廃棄する版 | |
Monad.forever IOアクション -- IOアクションを永遠に繰り返す | |
Monad.forM リスト IOアクション -- mapM と同じだが引数が逆順 | |
s <- getContents -- 全部読み込み(遅延評価) | |
interact 文字列変換関数 | |
-- 文字列を変換する関数を受け取って標準入力の入力に適用し、標準出力に出力する | |
fh <- IO.openFile ファイルパス IOモード | |
-- 指定されたファイルを指定されたIOモードで開くIOアクションを返す | |
IO.hGetContents fh | |
-- ファイルに含まれる内容を結果として返す IO String を返す | |
IO.hClose fh | |
-- ファイルを閉じる IOアクションを返す | |
IO.withFile ファイルパス IOモード ファイルをハンドルを受け取って何かする関数 | |
-- ファイルを開いて、何かする関数で処理し、そのあとファイルを閉じる | |
IO.hPutStr fh 文字列 | |
-- ファイルに文字列を改行をつけて出力 | |
IO.hPutChar fh 文字 | |
-- ファイルに文字を出力 | |
IO.hGetChar fh | |
-- ファイルから一文字入力 | |
IO.hGetLine fh | |
-- ファイルから一行入力、改行文字は捨てられる | |
Io.readFile ファイル名 | |
-- ファイルの内容を文字列として読み込む | |
IO.writeFile ファイル名 文字列 | |
-- ファイルに文字列を書き込む(上書き) | |
IO.appendFile ファイル名 文字列 | |
-- ファイルに文字列を書き込む(追記) | |
IO.openTempFile ディレクトリパス テンポラリファイルの基準名 | |
-- テンポラリファイルを開き、その名前とハンドルを返す | |
Ex.bracket リソースの確保を行う リソースを開放する リソースを受け取り何かする | |
-- 失敗した時に確実にリソースを開放する(例外が起こらなくても開放する) | |
Ex.bracketOnError リソースの確保を行う リソースを開放する リソースを受け取り何かする | |
-- 失敗した時にリソースを開放する(例外が起こった場合にのみ開放する) | |
progName <- Env.getProgName | |
-- コマンド名を取得 | |
args <- Env.getArgs | |
-- コマンドライン引数を取得(文字列の配列) | |
-- ■ byteString | |
import qualified Data.ByteString.Lazy as B | |
import qualified Data.ByteString as S | |
B.pack [41,42,43] -- "ABC"のようなB.ByteString | |
B.unpack $ B.pack [41,42,43] -- [41,42,43] | |
B.fromChunks [chank1, chank2, ... ] -- S.ByteString をまとめて B.ByteString を作る | |
B.cons 41 $ B.pack [42,43] -- "ABC"のようなB.ByteString | |
-- その他 Data.List や System.IO で定義されている関数とよく似た関数がある。 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment