ふつうのHaskellプログラミング 練習問題
ページ数などは初版第4版基準。
正しい自信はない。プログラム類は一応動いた。
あと壮絶な斜め読みをしているので、題意に沿った解答ができているとは限らない。
Haskellとか分からんし…はやく慣れたいね。
2.8 練習問題(P. 53)
1. countbyte.hs
main = do cs <- getContents print $ length cs
2. countword.hs
main = do cs <- getContents print $ length $ words cs
3.6 練習問題(P. 82) swapa.hs
main = do cs <- getContents putStr $ map swappa cs where swappa 'A' = 'a' swappa 'a' = 'A' swappa c = c
4.4 練習問題(P. 99)
1. sort.hs
import List main = do cs <- getContents putStr $ unlines $ sort $ lines cs
2. uniq.hs
import List main = do cs <- getContents putStr $ unlines $ remdup $ group $ sort $ lines cs where remdup :: [[a]] -> [a] remdup [] = [] remdup (x:xs) = head x : remdup xs
6.9 練習問題(P. 157)
resolve f (x:xs) = (textify x) ++ (resolve f xs) getenv key env = (fromMaybe "" (lookup key env)) readTemplete id = ((readFile (prefix repo)) ++ "/" ++ id)
7.9 練習問題(P. 191)
わからん。タプルをリストになおすとかどうやればいいの?
というか二重リスト作ってその二重リストにリストを要素として追加とかってどう書けば正しく動くの?
8.6 練習問題(P. 217)
1. 2. 3. strip.hs
lstrip = dropWhile isWhite where isWhite ' ' = True isWhite '\t' = True isWhite '\n' = True isWhite _ = False rstrip = reverse . lstrip . reverse strip = rstrip . lstrip main = do cs <- getContents putStrLn $ strip cs
isWhiteがちょっとダメだと思いますこれ
4. tail.hs (point-free version)
main = getContents >>= (putStr . lastNLines 10) where lastNLines n = unlines . reverse . take n . reverse . lines
これはいい感じだ。よく分かってない>>=も使った。いかにもHaskellっぽい。
5. fgrep.hs (maybe point-free version)
import System import List main = do args <- getArgs cs <- getContents putStr $ fgrep (head args) cs where fgrep pattern = unlines . filter (match pattern) . lines match pattern = any (isPrefixOf pattern) . tails
あんまかっこよくない。というかモナドよく分かってないので、上のdo文を使わない形で書き換えろと言われたら無理だ。
それ以降
まだやってない