Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
第4回 スタート Haskell2 第9章
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mizu__tama
September 09, 2012
540
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第4回 スタート Haskell2 第9章
mizu__tama
September 09, 2012
More Decks by mizu__tama
See All by mizu__tama
第2回 スタートHaskell2 3. 関数の構文
mizu__tama
2
670
Featured
See All Featured
Everyday Curiosity
cassininazir
0
310
The agentic SEO stack - context over prompts
schlessera
0
910
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Crafting Experiences
bethany
1
310
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Transcript
ୈ9ষ ͬͱೖྗɺͬͱग़ྗ !NJ[V@@UBNB 129݄9༵
ͬͱೖྗɺͬͱग़ྗ wϑΝΠϧ wίϚϯυϥΠϯҾ wཚ wCZUFTUSJOH 129݄9༵
ϑΝΠϧͱετϦʔϜ w)BTLFMMͰετϦʔϜσʔλΛ ؆୯ʹѻ͏ํ๏ wԆ*0ͷಈ࡞ 129݄9༵
ೖྗͷϦμΠϨΫτ import Control.Monad import Data.Char main = forever $ do
l <- getLine putStrLn $ map toUpper l Q HIDNBLFDBQTMPDLFS DBQTMPDLFSIBJLVUYU 129݄9༵
ೖྗͷϦμΠϨΫτ import Control.Monad import Data.Char main = forever $ do
l <- getLine putStrLn $ map toUpper l Q HIDNBLFDBQTMPDLFS DBQTMPDLFSIBJLVUYU 129݄9༵
HFU$POUFOUT HFU$POUFOUT*04USJOH import Data.Char main = do contents <- getContents
putStr $ map toUpper contents w ඪ४ೖྗ͔Β&0'จࣈʹୡ͢Δ·Ͱ ͯ͢ͷจࣈΛಡΈࠐΉ w Ԇ*0Λߦ͏ Q 129݄9༵
HFU$POUFOUT HFU$POUFOUT*04USJOH import Data.Char main = do contents <- getContents
putStr $ map toUpper contents w ඪ४ೖྗ͔Β&0'จࣈʹୡ͢Δ·Ͱ ͯ͢ͷจࣈΛಡΈࠐΉ w Ԇ*0Λߦ͏ Q ΠέͯΔʂ 129݄9༵
Ԇ*0 import Data.Char main = do contents <- getContents putStr
$ map toUpper contents Q DBQTMPDLFSIBJLVUYU ·ͩจࣈྻ ͍Βͳ͍ΑͶ ࠷ऴతʹจࣈྻʹධՁ͞ΕΔϓϩϛε ϝϞϦ 129݄9༵
Ԇ*0 import Data.Char main = do contents <- getContents putStr
$ map toUpper contents Q DBQTMPDLFSIBJLVUYU ·ͩ·ͩɺ ಡΈࠐ·ͳ͍Α ೖྗͷ݁ՌʹUP6QQFSΛϚοϓ͢Δϓϩϛε ϝϞϦ 129݄9༵
Ԇ*0 import Data.Char main = do contents <- getContents putStr
$ map toUpper contents Q DBQTMPDLFSIBJLVUYU ͔Βͷ ೖྗͷঢ়گʁ ϝϞϦ ೖྗͷ݁ՌʹUP6QQFSΛϚοϓ͢Δϓϩϛε ϝϞϦ େจࣈԽ͞Εͨ ߦ͕ඞཁͩΑʂ 129݄9༵
Ԇ*0 import Data.Char main = do contents <- getContents putStr
$ map toUpper contents Q DBQTMPDLFSIBJLVUYU ϝϞϦ I'm a lil' teapot What's with that airplane food, huh? It's so small, tasteless [EOF] IBJLVUYU 129݄9༵
JOUFSBDU JOUFSBDU 4USJOH4USJOH *0 main = do contents <- getContents
putStr (shortLinesOnly contents) shortLinesOnly :: String -> String shortLinesOnly = unlines . filter (\line -> length line < 10) . lines ೖྗΛจࣈྻͱͯ͠ड͚औΔ ड͚औͬͨจࣈྻΛؔͰม͢Δ ݁ՌΛग़ྗ͢Δ ͱ͍͏Α͋͘ΔύλʔϯΛ؆୯ʹࡁ·ͤΔ Q 129݄9༵
JOUFSBDU JOUFSBDU 4USJOH4USJOH *0 main = interact shortLinesOnly shortLinesOnly ::
String -> String shortLinesOnly = unlines . filter (\line -> length line < 10) . lines ೖྗΛจࣈྻͱͯ͠ड͚औΔ ड͚औͬͨจࣈྻΛؔͰม͢Δ ݁ՌΛग़ྗ͢Δ ͱ͍͏Α͋͘ΔύλʔϯΛ؆୯ʹࡁ·ͤΔ Q 129݄9༵
ϑΝΠϧͱετϦʔϜ w)BTLFMMͰετϦʔϜσʔλΛ ؆୯ʹѻ͏ํ๏ wԆ*0ͷಈ࡞ ͋Δೖྗʹରͯ͠ͲΜͳग़ྗ͕ߟ͑ΒΕΔ͔ͱ͍͏ ࢹ͔Βߟ͑ͯɺͦͷมΛ͢ΔؔΛॻ͘ 129݄9༵
ϑΝΠϧͷಡΈॻ͖ w ϑΝΠϧΛ։͖ɺϋϯυϧΛ֫ಘͯ͠ ϑΝΠϧʹରͯ͠Կ͔Λߦ͏ PQFO'JMF XJUI'JMF I(FU$POUFOUT
SFBE'JMF XSJUF'JMF BQQFOE'JMF w Ұ࣌ϑΝΠϧΛ͏ PQFO5FNQ'JMF SFNPWF'JMF SFOBNF'JMF w ࣦഊͯ͠ϑΝΠϧΛด͡Δ CSBDLFU CSBDLFU0O&SSPS 129݄9༵
PQFO'JMF PQFO'JMF'JMF1BUI*0.PEF*0)BOEMF import System.IO main = do handle <- openFile
“baabaa.txt” ReadMode contents <- hGetContents handle putStr contents hClose handle w 'JMF1BUIɹ4USJOHͷܕγϊχϜ w *0.PEF 3FBE.PEF 8SJUF.PEF "QQFOE.PEF 3FBE8SJUF.PEF Q 129݄9༵
XJUI'JMF XJUI'JMF'JMF1BUI*0.PEF )BOEMF*0B *0B import System.IO main = do
withFile “baabaa.txt” ReadMode $ \handle -> do contents <- hGetContents handle putStr contents 'JMF1BUIͱ*0.PEF͔Β)BOEMFΛಘΔ )BOEMFΛؔʹ͢ ϑΝΠϧϋϯυϧΛด͡Δ ͕ؔฦͨ͠*0ΞΫγϣϯΛฦ͢ Q 129݄9༵
XJUI'JMF XJUI'JMF'JMF1BUI*0.PEF )BOEMF*0B *0B import System.IO main = do
withFile “baabaa.txt” ReadMode $ \handle -> do contents <- hGetContents handle putStr contents 'JMF1BUIͱ*0.PEF͔Β)BOEMFΛಘΔ )BOEMFΛؔʹ͢ ϑΝΠϧϋϯυϧΛด͡Δ ͕ؔฦͨ͠*0ΞΫγϣϯΛฦ͢ Q ࣦഊͨ͠ ߹ʂ 129݄9༵
ϒϥέοτ ԿΒ͔ͷϦιʔεΛ֫ಘ͢Δ ֫ಘͨ͠Ϧιʔεʹରͯؔ͠Λద༻͢Δ ϦιʔεΛղ์͢Δʢ࣮֬ʹʂʣ ͕ؔฦͨ͠*0ΞΫγϣϯΛฦ͢ CSBDLFU*0B
B*0C B*0D *0D withFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a withFile name mode f = bracket (openFile name mode) (\handle -> hClose handle) (\handle -> f handle) Q 129݄9༵
ϒϥέοτ ԿΒ͔ͷϦιʔεΛ֫ಘ͢Δ ֫ಘͨ͠Ϧιʔεʹରͯؔ͠Λద༻͢Δ ϦιʔεΛղ์͢Δʢ࣮֬ʹʂʣ ͕ؔฦͨ͠*0ΞΫγϣϯΛฦ͢ CSBDLFU*0B
B*0C B*0D *0D withFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a withFile name mode f = bracket (openFile name mode) (\handle -> hClose handle) (\handle -> f handle) Q 129݄9༵
ϒϥέοτ ԿΒ͔ͷϦιʔεΛ֫ಘ͢Δ ֫ಘͨ͠Ϧιʔεʹରͯؔ͠Λద༻͢Δ ϦιʔεΛղ์͢Δʢ࣮֬ʹʂʣ ͕ؔฦͨ͠*0ΞΫγϣϯΛฦ͢ CSBDLFU*0B
B*0C B*0D *0D withFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a withFile name mode f = bracket (openFile name mode) (\handle -> hClose handle) (\handle -> f handle) Q 129݄9༵
ϒϥέοτ ԿΒ͔ͷϦιʔεΛ֫ಘ͢Δ ֫ಘͨ͠Ϧιʔεʹରͯؔ͠Λద༻͢Δ ϦιʔεΛղ์͢Δʢ࣮֬ʹʂʣ ͕ؔฦͨ͠*0ΞΫγϣϯΛฦ͢ CSBDLFU*0B
B*0C B*0D *0D withFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a withFile name mode f = bracket (openFile name mode) (\handle -> hClose handle) (\handle -> f handle) Q 129݄9༵
ϋϯυϧΛѲΕʂ w I(FU$POUFOUTϑΝΠϧͷ ϋϯυϧʹରͯ͠ಈ࡞͢ΔHFU$POUFOUT I(FU-JOF I1VU4US I1VU4US-O I(FU$IBS w
ϑΝΠϧΛಡΈࠐΈɺ ͦͷίϯςϯπΛจࣈྻͱͯ͠ѻ͏ SFBE'JMF XSJUF'JMF BQQFOE'JMF 129݄9༵
SFBE'JMF SFBE'JMF'JMF1BUI*04USJOH import System.IO main = do contents <- readFile
“baabaa.txt” putStr contents ϑΝΠϧύεΛड͚औΔ ͦͷϑΝΠϧΛಡࠐΉ ͦͷ༰Λද͢จࣈྻΛฦ͢ *0ΞΫγϣϯΛฦ͢ Q 129݄9༵
XSJUF'JMF ϑΝΠϧύεͱɺ ͦͷϑΝΠϧʹॻ͖ࠐΈ͍ͨจࣈྻΛड͚औΔ ͦͷॻ͖ࠐΈΛߦ͏*0ΞΫγϣϯΛฦ͢ XSJUF'JMF'JMF1BUI4USJOH*0 import System.IO import
Data.Char main = do contents <- readFile “baabaa.txt” writeFile “baabaacaps.txt” (map toUpper contents) Q ˞ࢦఆ͞ΕͨϑΝΠϧ͕͢Ͱʹଘࡏ͢Δ߹ɺ্ॻ͖͢Δ 129݄9༵
BQQFOE'JMF ϑΝΠϧύεͱɺ ͦͷϑΝΠϧʹॻ͖ࠐΈ͍ͨจࣈྻΛड͚औΔ ͦͷॻ͖ࠐΈΛߦ͏*0ΞΫγϣϯΛฦ͢ BQQFOE'JMF'JMF1BUI4USJOH*0 import System.IO main
= do todoItem <- getLine appendFile “todo.txt” (todoItem ++ “\n”) Q ˞ࢦఆ͞ΕͨϑΝΠϧ͕͢Ͱʹଘࡏ͢Δ߹ɺඌʹه͢Δ 129݄9༵
PQFO'JMF XJUI'JMF SFBE'JMF XSJUF'JMF BQQFOE'JMF ϑΝΠϧૢ࡞ͷؔ·ͱΊ ࣗ༝͕ߴ͍ ࣗͰॻ͘෦͕গͳ͍ ϑΝΠϧΛ։͍ͯ ϋϯυϧΛಘΔ
ϋϯυϧΛͬͯ ϑΝΠϧͷதΛ จࣈྻͱͯ͠औΓग़͢ ϑΝΠϧΛด͡Δ औΓग़ͨ͠จࣈྻʹ ର͢Δૢ࡞ 129݄9༵
PQFO'JMF XJUI'JMF SFBE'JMF XSJUF'JMF BQQFOE'JMF ϑΝΠϧૢ࡞ͷؔ·ͱΊ ࣗ༝͕ߴ͍ ࣗͰॻ͘෦͕গͳ͍ ϑΝΠϧΛ։͍ͯ ϋϯυϧΛಘΔ
ϋϯυϧΛͬͯ ϑΝΠϧͷதΛ จࣈྻͱͯ͠औΓग़͢ ϑΝΠϧΛด͡Δ औΓग़ͨ͠จࣈྻʹ ର͢Δૢ࡞ 129݄9༵
PQFO'JMF XJUI'JMF SFBE'JMF XSJUF'JMF BQQFOE'JMF ϑΝΠϧૢ࡞ͷؔ·ͱΊ ࣗ༝͕ߴ͍ ࣗͰॻ͘෦͕গͳ͍ ϑΝΠϧΛ։͍ͯ ϋϯυϧΛಘΔ
ϋϯυϧΛͬͯ ϑΝΠϧͷதΛ จࣈྻͱͯ͠औΓग़͢ ϑΝΠϧΛด͡Δ औΓग़ͨ͠จࣈྻʹ ର͢Δૢ࡞ 129݄9༵
PQFO'JMF XJUI'JMF SFBE'JMF XSJUF'JMF BQQFOE'JMF ϑΝΠϧૢ࡞ͷؔ·ͱΊ ࣗ༝͕ߴ͍ ࣗͰॻ͘෦͕গͳ͍ ϑΝΠϧΛ։͍ͯ ϋϯυϧΛಘΔ
ϋϯυϧΛͬͯ ϑΝΠϧͷதΛ จࣈྻͱͯ͠औΓग़͢ ϑΝΠϧΛด͡Δ औΓग़ͨ͠จࣈྻʹ ର͢Δૢ࡞ 129݄9༵
UFNQϑΝΠϧΛ͏ (tempName, tempHandle) <- openTempFile “.” “temp” hPutStr tempHandle newTodoItems
hClose tempHandle removeFile “todo.txt” renameFile tempName “todo.txt” QɹҰ෦ൈਮ ϑΝΠϧͷதΛॻ͖͑Δ Ұ࣌ϑΝΠϧʹ৽͍͠༰Λॻ͖ࠐΈɺ ݩͷϑΝΠϧͱஔ͖͑Δ PQFO5FNQ'JMF 4ZTUFN*0 SFNPWF'JMF SFOBNF'JMF 4ZTUFN%JSFDUPSZ 129݄9༵
UFNQϑΝΠϧΛ͏ (tempName, tempHandle) <- openTempFile “.” “temp” hPutStr tempHandle newTodoItems
hClose tempHandle removeFile “todo.txt” renameFile tempName “todo.txt” QɹҰ෦ൈਮ ϑΝΠϧͷதΛॻ͖͑Δ Ұ࣌ϑΝΠϧʹ৽͍͠༰Λॻ͖ࠐΈɺ ݩͷϑΝΠϧͱஔ͖͑Δ PQFO5FNQ'JMF 4ZTUFN*0 SFNPWF'JMF SFOBNF'JMF 4ZTUFN%JSFDUPSZ ϓϩάϥϜͷҟৗऴྃͰɺҰ࣌ϑΝΠϧ͕ͬͯ͠·͏ 129݄9༵
ΫϦʔϯΞοϓ CSBDLFU0O&SSPS*0B B*0C B*0D *0D ͕ىͬͨ͜߹ͰҰ࣌ϑΝΠϧ͕ ࣮֬ʹআ͞ΕΔ bracketOnError (openTempFile
“.” “temp”) (\(tempName, tempHandle) -> do hClose tempHandle removeFile tempName) (\(tempName, tempHandle) -> do hPutStr tempHandle newTodoItems hClose tempHandle removeFile “todo.txt” renameFile tempName “todo.txt”) QɹҰ෦ൈਮ 129݄9༵
ΫϦʔϯΞοϓ CSBDLFU0O&SSPS*0B B*0C B*0D *0D ͕ىͬͨ͜߹ͰҰ࣌ϑΝΠϧ͕ ࣮֬ʹআ͞ΕΔ bracketOnError (openTempFile
“.” “temp”) (\(tempName, tempHandle) -> do hClose tempHandle removeFile tempName) (\(tempName, tempHandle) -> do hPutStr tempHandle newTodoItems hClose tempHandle removeFile “todo.txt” renameFile tempName “todo.txt”) QɹҰ෦ൈਮ Τϥʔ͕ൃੜͨ͠ ߹ʹ͖͢͜ͱ 129݄9༵
ίϚϯυϥΠϯҾ ϢʔβͷࢦࣔΛϓϩάϥϜʹ͑Δ ࠷ળͷํ๏ import System.Environment import Data.List main = do
args <- getArgs progName <- getProgName putStrLn “The arguments are:” mapM putStrLn args putStrLn “The program name is” putStrLn progName Q 129݄9༵
EJTQBUDIؔ dispatch :: String -> [String] -> IO () dispatch
“add” = add dispatch “view” = view dispatch “remove” = remove main = do (command:argList) <- getArgs dispatch command argList add :: [String] -> IO () add [fileName, todoItem] = appendFile fileName (todoItem ++ “\n”) QɹҰ෦ൈਮ w ϓϩάϥϜʹෳͷػೳΛ࣋ͨͤΔ w ؆୯ʹػೳΛՃͰ͖Δ EJTQBUDI͔ؔΒదͳؔΛड͚औΓɺ ͦͷؔʹҾΛͯ͠*0ΞΫγϣϯΛಘΔ 129݄9༵
ෆਖ਼ͳೖྗʹରԠ͢Δ dispatch :: String -> [String] -> IO () dispatch
“add” = add dispatch “view” = view dispatch “remove” = remove dispatch command = doesntExist command doesntExist :: String -> [String] -> IO () doesntExist command _ = putStrLn $ “The “ ++ command ++ “command doesn’t exist” main = do (command:argList) <- getArgs dispatch command argList add :: [String] -> IO () add [fileName, todoItem] = appendFile fileName (todoItem ++ “\n”) add _ = putStrLn “The add command takes exactly two arguments” Q 129݄9༵
ϥϯμϜੑ w७ਮͳ)BTLFMMཚ͕ۤखʁ wϥϯμϜੑ*0Ͱ֎͔Β࣋ͬͯ͘Δ SBOEPN 3BOEPN(FOH 3BOEPNB H B H 4ZTUFN3BOEPNϞδϡʔϧ
SBOEPNT 3BOEPN(FOH 3BOEPNB H<B> SBOEPN3 3BOEPN(FOH 3BOEPNB B B H B H SBOEPN3T 3BOEPN(FOH 3BOEPNB B B H<B> 129݄9༵
ϥϯμϜੑͱ*0HFU4UE(FO import System.Random main = do gen <- getStdGen putStrLn
$ take 20 (randomRs (‘a’, ‘z’) gen) Q ࣮ߦ͢Δͨͼʹҧ͏݁Ռ͕ಘΒΕΔ import System.Random main = do gen <- getStdGen putStrLn $ take 20 (randomRs (‘a’, ‘z’) gen) gen2 <- getStdGen putStrLn $ take 20 (randomRs (‘a’, ‘z’) gen2) Q ಉ͡จࣈྻ͕ճදࣔ͞ΕΔ 129݄9༵
ϥϯμϜੑͱ*0OFX4UE(FO import System.Random main = do gen <- getStdGen putStrLn
$ take 20 (randomRs (‘a’, ‘z’) gen) gen' <- newStdGen gen2 <- getStdGen putStrLn $ take 20 (randomRs (‘a’, ‘z’) gen') putStrLn $ take 20 (randomRs (‘a’, ‘z’) gen2) Qվ w ݱࡏͷཚδΣωϨʔλΛͭͷδΣωϨʔλʹׂ ৽͍͠ཚδΣωϨʔλ͕ಘΒΕΔ άϩʔόϧδΣωϨʔλ͕ߋ৽͞ΕΔ 129݄9༵
CZUFTUSJOH w4USJOHΑΓޮྑ͘จࣈྻΛѻ͏ wਖ਼֨CZUFTUSJOHͱԆCZUFTUSJOH %BUB#ZUF4USJOH %BUB#ZUF4USJOH-B[Z wCZUFTUSJOHϞδϡʔϧͷؔ %BUB-JTUͷؔͱΑ͘ࣅͨؔ
4ZTUFN*0ͷؔͱಉ༷ͷؔ ·ͣී௨ͷจࣈྻͰॻ͍ͯΈͯɺ ύϑΥʔϚϯεʹຬͰ͖ͳ͚ΕCZUFTUSJOHͰॻ͖͑Δ 129݄9༵
ͬͱೖྗɺͬͱग़ྗ wϑΝΠϧ wίϚϯυϥΠϯҾ wཚ wCZUFTUSJOH 129݄9༵