hayaのHaskell日記

2006-08-31

[] GHCリファレンスを読んでみる 04:25

Data.List

http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-List.html

(++) :: [a] -> [a] -> [a]

2つのリストを連結する

head :: [a] -> a

リストの最初の要素を返す

last :: [a] -> a

リストの最後の要素を返す

tail :: [a] -> [a]

リストの最初の要素以外を除いたリストを返す

init :: [a] -> [a]

リストの最後の要素以外を除いたリストを返す

null :: [a] -> Bool

リストが空ならばTrue、そうでなければFalse

length :: [a] -> Int

リストの要素数を返す。genericLengthのインスタンス

map :: (a -> b) -> [a] -> [b]

引数リストの要素に、1つずつ関数適用していったリストを返す

reverse :: [a] -> [a]

リストを逆順にして返す。無限リストは扱えないっぽい

intersperse :: a -> [a] -> [a]

intersperse 1 [2,3,4,5,6,7] #=> [2,1,3,1,4,1,5,1,6,1,7]

リストの各要素の間に同じものを挿入。

ArronArron2007/04/09 07:03http://1ea0761539498fce0c572a5b1c14370f-t.kc93dkc.info <a href="http://1ea0761539498fce0c572a5b1c14370f-h.kc93dkc.info">1ea0761539498fce0c572a5b1c14370f</a> [url]http://1ea0761539498fce0c572a5b1c14370f-b1.kc93dkc.info[/url] [url=http://1ea0761539498fce0c572a5b1c14370f-b2.kc93dkc.info]1ea0761539498fce0c572a5b1c14370f[/url] [u]http://1ea0761539498fce0c572a5b1c14370f-b3.kc93dkc.info[/u] 99503592f31537606ea682f305b4ab39

EzequielEzequiel2007/04/30 22:46http://4bbd9241b9a07210810d1346a5bc0a7f-t.gf7tiuy9.info <a href="http://4bbd9241b9a07210810d1346a5bc0a7f-h.gf7tiuy9.info">4bbd9241b9a07210810d1346a5bc0a7f</a> [url]http://4bbd9241b9a07210810d1346a5bc0a7f-b1.gf7tiuy9.info[/url] [url=http://4bbd9241b9a07210810d1346a5bc0a7f-b2.gf7tiuy9.info]4bbd9241b9a07210810d1346a5bc0a7f[/url] [u]http://4bbd9241b9a07210810d1346a5bc0a7f-b3.gf7tiuy9.info[/u] b8c211221d19f4c8bbabc2332ed541f5

free virtual girlfree virtual girl2007/07/24 10:42 <a href="http://www.hero777.kokoom.com/virtuagirl2.html">free virtual girl</a> [url="http://www.hero777.kokoom.com/virtuagirl2.html"]free virtual girl[/url]

bow wow ft ciarabow wow ft ciara2007/07/25 03:36<a href="http://www.uuyvnckt.cn/page14.html">adult incontinence diapers</a> adult incontinence diapers,<a href="http://www.uuyvnckt.cn/page9.html">creative friends craft supplies</a> creative friends craft supplies,<a href="http://www.uuyvnckt.cn/page12.html">crissy moran videos</a> crissy moran videos,<a href="http://www.uuyvnckt.cn/page25.html">horse games for the computer</a> horse games for the computer,<a href="http://www.uuyvnckt.cn/page37.html">gamecube movie spongebob squarepants through walk</a> gamecube movie spongebob squarepants through walk,<a href="http://www.uuyvnckt.cn/page28.html">easy shoes</a> easy shoes,<a href="http://www.uuyvnckt.cn/page20.html">ciara 1 2 step lyrics</a> ciara 1 2 step lyrics,<a href="http://www.uuyvnckt.cn/page42.html">fat mature women galleries</a> fat mature women galleries,<a href="http://www.uuyvnckt.cn/page13.html">_les travaux de jante de hentai</a> _les travaux de jante de hentai,<a href="http://www.uuyvnckt.cn/page10.html">google desktop security</a> google desktop security,

dota item listdota item list2007/07/25 12:33 <a href="http://www.xavukurl.cn/page59.html">foxfire web browser</a> <a href="http://www.xavukurl.cn/page44.html">anna benson in playboy</a> <a href="http://www.xavukurl.cn/page49.html">i monster lyrics</a> <a href="http://www.xavukurl.cn/page46.html">bette midler baby mine lyrics</a> <a href="http://www.xavukurl.cn/page35.html">expedia online coupons</a> <a href="http://www.xavukurl.cn/page50.html">custom eye contacts</a> <a href="http://www.xavukurl.cn/page58.html">big steve thong pictures</a> <a href="http://www.xavukurl.cn/page37.html">emule server list</a> <a href="http://www.xavukurl.cn/page41.html">free love match horoscope</a> <a href="http://www.xavukurl.cn/page39.html">b2b marketing list</a> [url="http://www.xavukurl.cn/page59.html"]foxfire web browser[/url] [url="http://www.xavukurl.cn/page44.html"]anna benson in playboy[/url] [url="http://www.xavukurl.cn/page49.html"]i monster lyrics[/url] [url="http://www.xavukurl.cn/page46.html"]bette midler baby mine lyrics[/url] [url="http://www.xavukurl.cn/page35.html"]expedia online coupons[/url] [url="http://www.xavukurl.cn/page50.html"]custom eye contacts[/url] [url="http://www.xavukurl.cn/page58.html"]big steve thong pictures[/url] [url="http://www.xavukurl.cn/page37.html"]emule server list[/url] [url="http://www.xavukurl.cn/page41.html"]free love match horoscope[/url] [url="http://www.xavukurl.cn/page39.html"]b2b marketing list[/url]

beer belly girlbeer belly girl2007/07/26 06:23<a href="http://www.kiqakrca.cn/page72.html">johnnie walker playboy ads</a> johnnie walker playboy ads,<a href="http://www.kiqakrca.cn/page99.html">buy flowers wholesale</a> buy flowers wholesale,<a href="http://www.kiqakrca.cn/page79.html">free local chat rooms</a> free local chat rooms,<a href="http://www.kiqakrca.cn/page54.html">chinese character tattoos</a> chinese character tattoos,<a href="http://www.kiqakrca.cn/page98.html">camaro z28 keychain</a> camaro z28 keychain,<a href="http://www.kiqakrca.cn/page64.html">hot finger</a> hot finger,<a href="http://www.kiqakrca.cn/page87.html">free teen girl invitations</a> free teen girl invitations,<a href="http://www.kiqakrca.cn/page92.html">i believe in thing called love</a> i believe in thing called love,<a href="http://www.kiqakrca.cn/page76.html">fast nice cars</a> fast nice cars,<a href="http://www.kiqakrca.cn/page78.html">expedia discount code</a> expedia discount code,

a welsh viewa welsh view2007/07/26 09:19<a href="http://www.vllaxicr.cn/page81.html">cuban missile crisis wikipedia</a> cuban missile crisis wikipedia,<a href="http://www.vllaxicr.cn/page73.html">dying dogs</a> dying dogs,<a href="http://www.vllaxicr.cn/page62.html">95 honda accord cold air intakes</a> 95 honda accord cold air intakes,<a href="http://www.vllaxicr.cn/page85.html">kitchen furniture manufacturers uk</a> kitchen furniture manufacturers uk,<a href="http://www.vllaxicr.cn/page77.html">25th id website</a> 25th id website,<a href="http://www.vllaxicr.cn/page96.html">card christmas gift shopping</a> card christmas gift shopping,<a href="http://www.vllaxicr.cn/page68.html">all of arnold schwarzenegger movies</a> all of arnold schwarzenegger movies,<a href="http://www.vllaxicr.cn/page69.html">japanese to english online dictionary</a> japanese to english online dictionary,<a href="http://www.vllaxicr.cn/page70.html">ferrari pch</a> ferrari pch,<a href="http://www.vllaxicr.cn/page89.html">international airfares cheap travel deals consolidator</a> international airfares cheap travel deals consolidator,

hot latina sex videohot latina sex video2007/07/27 23:48 <a href="http://www.oehwgvpm.cn/page20.html">dell 670 workstation</a> <a href="http://www.oehwgvpm.cn/page30.html">california legal research jobs</a> <a href="http://www.oehwgvpm.cn/page39.html">action baseball</a> <a href="http://www.oehwgvpm.cn/page25.html">african american nascar driver</a> <a href="http://www.oehwgvpm.cn/page22.html">blue bell flowers missouri</a> <a href="http://www.oehwgvpm.cn/page21.html">blowjob pov</a> <a href="http://www.oehwgvpm.cn/page35.html">christmas song words</a> <a href="http://www.oehwgvpm.cn/page23.html">cat pencil drawing</a> <a href="http://www.oehwgvpm.cn/page36.html">gem productpage ring silver stone</a> <a href="http://www.oehwgvpm.cn/page31.html">book books music</a> [url="http://www.oehwgvpm.cn/page20.html"]dell 670 workstation[/url] [url="http://www.oehwgvpm.cn/page30.html"]california legal research jobs[/url] [url="http://www.oehwgvpm.cn/page39.html"]action baseball[/url] [url="http://www.oehwgvpm.cn/page25.html"]african american nascar driver[/url] [url="http://www.oehwgvpm.cn/page22.html"]blue bell flowers missouri[/url] [url="http://www.oehwgvpm.cn/page21.html"]blowjob pov[/url] [url="http://www.oehwgvpm.cn/page35.html"]christmas song words[/url] [url="http://www.oehwgvpm.cn/page23.html"]cat pencil drawing[/url] [url="http://www.oehwgvpm.cn/page36.html"]gem productpage ring silver stone[/url] [url="http://www.oehwgvpm.cn/page31.html"]book books music[/url]

henrikmakotoinadomihenrikmakotoinadomi2007/08/01 07:56<a href="httpwwwlefnytjucnpage58html">bestpizzacentercityphiladelphia</a> bestpizzacentercityphiladelphia,<a href="httpwwwlefnytjucnpage48html">definepreserve</a> definepreserve,<a href="httpwwwlefnytjucnpage67html">malefiveseconds</a> malefiveseconds,<a href="httpwwwlefnytjucnpage54html">cecilcarteraz</a> cecilcarteraz,<a href="httpwwwlefnytjucnpage41html">freebiesandsamplesinaustralia</a> freebiesandsamplesinaustralia,<a href="httpwwwlefnytjucnpage54html">cecilsworlddecember222006</a> cecilsworlddecember222006,<a href="httpwwwlefnytjucnpage62html">lehenrikibsenunemaisondepoup233</a> lehenrikibsenunemaisondepoup233,<a href="httpwwwlefnytjucnpage46html">avgp233</a> avgp233,<a href="httpwwwlefnytjucnpage47html">rensen</a> rensen,<a href="httpwwwlefnytjucnpage47html">henriklarssonsmoke</a> henriklarssonsmoke,

トラックバック - http://haskell.g.hatena.ne.jp/harg/20060831

2006-08-28

[] 11.1節 モナドとは何か 00:09

1回よんでもなかなか実感がわかなかったので、ひたすら写経

定義

モナドとは、Monadという型クラスインスタンスである。

class Monad m where
  (>>=)  :: m a -> (a -> m b) -> m b
  return :: a -> m a

モナド

しかし、Monadクラスインスタンスとなるだけでは、モナドではない。モナドは、以下のモナド則を満たす必要がある。

1. (return x) >>= f == f x
2. m >>= return     == m
3. (m >>= f) >>= g  == m >>= (\x -> f x >>= g)

[] 11.2節 Maybeモナド 00:35

Maybeモナドの定義

data Maybe a = Nothing | Just a deriving (Eq, Ord)

instance Monad Maybe where
  (Just x) >>= f  = f x
  Nothing  >>= f  = Nothing
  
  return x        = Just x

タプルのリストをlookup

lookup :: a -> [(a, b)] -> Just b

Maybeモナドとlookupを組み合わせると、RubyのHashっぽいことができる。

[] 11.3節 リストモナド 00:53

具体的な使い道を見てみたいなぁ。

[] 11.4節 IOモナド 00:53

上に同じ。

[] 11.5節 モナドの構文 00:53

うーむ。そういうものだと受け入れるしかないね。

[] 11.6節 練習問題 00:53

main = getContents >>= putStr . firstNLines 10

firstNLines :: Int -> String -> String
firstNLines n = unlines . take n . lines
main = getContents >>= putStrLn . lastNLines 10

lastNLines :: Int -> String -> String
lastNLines n = unlines . reverse . take n . reverse . lines
tabStop = 8

main = getContents >>= putStr . expand

expand :: String -> String
expand = concatMap expandTab

expandTab :: Char -> String
expandTab '\t' = replicate tabStop '_'
expandTab c = [c]

無難に。

1998 honda accord1998 honda accord2007/07/24 21:31<a href="http://www.cwclewmm.cn/page40.html">custom id badge reels</a> custom id badge reels,<a href="http://www.cwclewmm.cn/page8.html">emo prom dresses</a> emo prom dresses,<a href="http://www.cwclewmm.cn/page24.html">hotmail inbox problems</a> hotmail inbox problems,<a href="http://www.cwclewmm.cn/page11.html">college sexo por internet</a> college sexo por internet,<a href="http://www.cwclewmm.cn/page38.html">canada email people search</a> canada email people search,<a href="http://www.cwclewmm.cn/page35.html">ford f150 fuel filter replacement</a> ford f150 fuel filter replacement,<a href="http://www.cwclewmm.cn/page17.html">envirofacts warehouse</a> envirofacts warehouse,<a href="http://www.cwclewmm.cn/page47.html">info http www maps google com</a> info http www maps google com,<a href="http://www.cwclewmm.cn/page48.html">category 3 cables</a> category 3 cables,<a href="http://www.cwclewmm.cn/page20.html">inca tattoos</a> inca tattoos,

get google emailget google email2007/07/25 00:30<a href="http://www.yhobqwny.cn/page89.html">irs public records</a> irs public records,<a href="http://www.yhobqwny.cn/page61.html">fatal nascar crash</a> fatal nascar crash,<a href="http://www.yhobqwny.cn/page93.html">google map points of interest virginia</a> google map points of interest virginia,<a href="http://www.yhobqwny.cn/page93.html">determining google page rank</a> determining google page rank,<a href="http://www.yhobqwny.cn/page53.html">intellectual law dictionary</a> intellectual law dictionary,<a href="http://www.yhobqwny.cn/page98.html">anime dvd</a> anime dvd,<a href="http://www.yhobqwny.cn/page54.html">graffiti murals</a> graffiti murals,<a href="http://www.yhobqwny.cn/page99.html">category 4</a> category 4,<a href="http://www.yhobqwny.cn/page80.html">equipment golf retailer</a> equipment golf retailer,<a href="http://www.yhobqwny.cn/page77.html">horse tattoo galleries</a> horse tattoo galleries,

jockey form thongjockey form thong2007/07/26 03:24<a href="http://www.heqtwaps.cn/page76.html">horse louisiana trailer used</a> horse louisiana trailer used,<a href="http://www.heqtwaps.cn/page71.html">jojo watches</a> jojo watches,<a href="http://www.heqtwaps.cn/page99.html">jordana jarjura nick lachey</a> jordana jarjura nick lachey,<a href="http://www.heqtwaps.cn/page88.html">if you dont wanna love me ill find</a> if you dont wanna love me ill find,<a href="http://www.heqtwaps.cn/page95.html">discovery videos</a> discovery videos,<a href="http://www.heqtwaps.cn/page52.html">furniture log making tool</a> furniture log making tool,<a href="http://www.heqtwaps.cn/page52.html">boise cascade office furniture</a> boise cascade office furniture,<a href="http://www.heqtwaps.cn/page87.html">christmas holly</a> christmas holly,<a href="http://www.heqtwaps.cn/page91.html">jeep engine rebuild</a> jeep engine rebuild,<a href="http://www.heqtwaps.cn/page63.html">b2b portals</a> b2b portals,

free muscle pornfree muscle porn2007/07/26 06:23<a href="http://www.kiqakrca.cn/page75.html">color grout to match rialto green tile</a> color grout to match rialto green tile,<a href="http://www.kiqakrca.cn/page80.html">cobra detector productpage radar</a> cobra detector productpage radar,<a href="http://www.kiqakrca.cn/page62.html">baby gift ides for new moms</a> baby gift ides for new moms,<a href="http://www.kiqakrca.cn/page95.html">inserting penis in vagina</a> inserting penis in vagina,<a href="http://www.kiqakrca.cn/page88.html">apple laptop carrying cases</a> apple laptop carrying cases,<a href="http://www.kiqakrca.cn/page85.html">astrud gilberto girl from ipanema</a> astrud gilberto girl from ipanema,<a href="http://www.kiqakrca.cn/page54.html">chinese character tattoos</a> chinese character tattoos,<a href="http://www.kiqakrca.cn/page88.html">apple powerbook 1400cs laptop</a> apple powerbook 1400cs laptop,<a href="http://www.kiqakrca.cn/page60.html">color contact lenses contacts</a> color contact lenses contacts,<a href="http://www.kiqakrca.cn/page57.html">bob marley could you be loved myspace video</a> bob marley could you be loved myspace video,

hott girl pink hairhott girl pink hair2007/07/26 21:20 <a href="http://www.yveyybmc.cn/page55.html">fast aol live help</a> <a href="http://www.yveyybmc.cn/page30.html">barley legal porn</a> <a href="http://www.yveyybmc.cn/page34.html">1988 acura integra rs</a> <a href="http://www.yveyybmc.cn/page52.html">driver g85 officejet scanner</a> <a href="http://www.yveyybmc.cn/page53.html">label guns</a> <a href="http://www.yveyybmc.cn/page49.html">columbus bar association ohio</a> <a href="http://www.yveyybmc.cn/page50.html">bodyboarding games</a> <a href="http://www.yveyybmc.cn/page46.html">graffiti creature</a> <a href="http://www.yveyybmc.cn/page41.html">jeff moore bank it project manager</a> <a href="http://www.yveyybmc.cn/page35.html">disney witch</a> [url="http://www.yveyybmc.cn/page55.html"]fast aol live help[/url] [url="http://www.yveyybmc.cn/page30.html"]barley legal porn[/url] [url="http://www.yveyybmc.cn/page34.html"]1988 acura integra rs[/url] [url="http://www.yveyybmc.cn/page52.html"]driver g85 officejet scanner[/url] [url="http://www.yveyybmc.cn/page53.html"]label guns[/url] [url="http://www.yveyybmc.cn/page49.html"]columbus bar association ohio[/url] [url="http://www.yveyybmc.cn/page50.html"]bodyboarding games[/url] [url="http://www.yveyybmc.cn/page46.html"]graffiti creature[/url] [url="http://www.yveyybmc.cn/page41.html"]jeff moore bank it project manager[/url] [url="http://www.yveyybmc.cn/page35.html"]disney witch[/url]

crystal lake nissancrystal lake nissan2007/07/27 10:19 <a href="http://www.bkpltdzx.cn/page46.html">ferrari 340</a> <a href="http://www.bkpltdzx.cn/page33.html">hotmail.com</a> <a href="http://www.bkpltdzx.cn/page34.html">big black cock pics</a> <a href="http://www.bkpltdzx.cn/page47.html">cancer mesothelioma site submit</a> <a href="http://www.bkpltdzx.cn/page23.html">beginner psp tutorials</a> <a href="http://www.bkpltdzx.cn/page32.html">japa nes fuck</a> <a href="http://www.bkpltdzx.cn/page37.html">enamel pin christmas bear</a> <a href="http://www.bkpltdzx.cn/page25.html">alisha nude</a> <a href="http://www.bkpltdzx.cn/page24.html">kodiak travel trailer</a> <a href="http://www.bkpltdzx.cn/page22.html">drag racing funny cars</a> [url="http://www.bkpltdzx.cn/page46.html"]ferrari 340[/url] [url="http://www.bkpltdzx.cn/page33.html"]hotmail.com[/url] [url="http://www.bkpltdzx.cn/page34.html"]big black cock pics[/url] [url="http://www.bkpltdzx.cn/page47.html"]cancer mesothelioma site submit[/url] [url="http://www.bkpltdzx.cn/page23.html"]beginner psp tutorials[/url] [url="http://www.bkpltdzx.cn/page32.html"]japa nes fuck[/url] [url="http://www.bkpltdzx.cn/page37.html"]enamel pin christmas bear[/url] [url="http://www.bkpltdzx.cn/page25.html"]alisha nude[/url] [url="http://www.bkpltdzx.cn/page24.html"]kodiak travel trailer[/url] [url="http://www.bkpltdzx.cn/page22.html"]drag racing funny cars[/url]

lyrics-nicklacheylyrics-nicklachey2007/08/01 13:31<a href="httpwwwnzgsravqcnpage59html">articlesundergraduatenurses</a> articlesundergraduatenurses,<a href="httpwwwnzgsravqcnpage47html">thoracictraumaradiography</a> thoracictraumaradiography,<a href="httpwwwnzgsravqcnpage49html">caracteristicascomputadoraportatil</a> caracteristicascomputadoraportatil,<a href="httpwwwnzgsravqcnpage64html">makegreatgiftsphotofeaturedfriendsvideos</a> makegreatgiftsphotofeaturedfriendsvideos,<a href="httpwwwnzgsravqcnpage55html">milliondollarlistinghgtv</a> milliondollarlistinghgtv,<a href="httpwwwnzgsravqcnpage46html">artikel61if246</a> artikel61if246,<a href="httpwwwnzgsravqcnpage56html">shedhandslipsfeelhedmouthnipplesoftstaredabigail</a> shedhandslipsfeelhedmouthnipplesoftstaredabigail,<a href="httpwwwnzgsravqcnpage41html">hotsexorgys</a> hotsexorgys,<a href="httpwwwnzgsravqcnpage40html">graphicbreastfeedingvideo</a> graphicbreastfeedingvideo,<a href="httpwwwnzgsravqcnpage62html">windows2003howtoaddanewservice</a> windows2003howtoaddanewservice,

トラックバック - http://haskell.g.hatena.ne.jp/harg/20060828

2006-08-27

[] 9.2節 静的型チェック型推論 18:12

いままでやってきたことでほぼカバーされた内容の復習。さらりと。

[] 9.3節 代数的データ型 18:12

ふつケルを読み進めてきて、初めて固まった。最初は具体的な用途が全然見えてこなかったけど、後半の具体例とかでなんとなく使い道のイメージは沸いてきた。

代数的データ型オブジェクト指向言語クラスにたとえるならば

みたいな感じだろうか。

再帰的な型の具体的な活用例も欲しかった。

[] 9.4節 型の別名と付け替え 18:12

何に使うのか不明なので流し読み。必要になったらまた読む。

[] 9.5節 型クラス 18:12

型クラスは、数あるいろんな型を性質ごとに分類したグループみたいな感じ。そして、そのグループに属するためには、必要な条件(クラスメソッドの実装)がある。いや、条件というより、使えるクラスメソッドによって分類されるといったほうがいいのかな。うーん。

ふつケルに書いてあるように、Javaインターフェース概念としては近い。多重継承ができる。Eq型クラスデフォルトの定義が面白い。

以前に悩んでいたことも、この節を読むことで解決した。==と等価演算子多相型で定義するときは、ちゃんと引数Eq型クラスインスタンスの型であることを書かなければエラーが出る、ということ。

(<><>) :: (Eq a) => a -> a -> Bool
a <><> b = a == b

これでおk。

[] 9.6節 練習問題 00:12

ちょっと拡張してみた

import List
import System

main = do cs <- getContents
          args <- getArgs
          putStr $ sortedStr (orderFromArg ((\(x:_) -> x) args) ) cs

sortedStr :: Order -> String -> String
sortedStr ord = unlines . map show . sortLinesBy ord . stringLines

orderFromArg :: String -> Order
orderFromArg ord
  | ord == "desc" = Desc
  | ord == "asc"  = Asc
  | otherwise     = Asc

stringLines :: String -> [Line]
stringLines = map tupleLine . zip [1..] . lines

tupleLine :: (Int, String) -> Line
tupleLine tup = MakeLine {number = fst tup, string = snd tup}

{- Definitions -}

data Line = MakeLine { number :: Int,
                       string :: String} deriving Show

data Order = Asc | Desc deriving Eq

sortLines :: [Line] -> [Line]
sortLines = sortBy (\x y -> number x `compare` number y)

sortLinesBy :: Order -> [Line] -> [Line]
sortLinesBy ord
  | ord == Asc  = sortBy (\x y -> number x `compare` number y)
  | ord == Desc = sortBy (\x y -> number y `compare` number x)

昇順でソートするか、降順でソートするか、コマンドライン引数から指定できるsortLinesBy関数を定義した。sortLinesはそのエイリアス

コンパイルしてできたバイナリ名(lines.exe)とすると

lines asc < データファイル名

で昇順にソート

lines desc < データファイル名

で降順にソート

解答を写経

1
data Line = Line Int String
2
data Line = Line Int String deriving Show
main = print (Line 2 "test")
3
data Line = Line {number :: Int, string :: String} deriving Show
4
myLines :: [Line]
myLines :: [(Lines 4 "4th line"),
            (Lines 1 "first line"),
            (Lines 5 "5th line"),
            (Lines 3 "3rd line"),
            (Lines 2 "second line")]

main = print myLines
5
sortLines :: [Line] -> [Line]
sortLines = sortBy (\a b -> number a `compare` number b)

[] 9章の感想 00:18

最初の代数的データ型あたりは、なんか退屈だったけど、型クラスはとても楽しく読めた。代数的データ型の「よくわからないもやもやとした感じ」が、章を読み進めるにつれてだんだんと晴れていくような楽しさがあった。練習問題も面白かったので、思わず拡張してみた。

トラックバック - http://haskell.g.hatena.ne.jp/harg/20060827

2006-08-25

[] 7.9節 練習問題 fold 21:38

まずは自力で

num = 60

main = do cs <- getContents
          putStr $ fold cs

fold :: String -> String
fold cs
  | length cs <= num = cs
  | otherwise      = unlines $ concatMap wrapLine $ lines cs
    where
      wrapLine :: String -> [String]
      wrapLine line = makeLines $ splitAt num line
      
      makeLines :: (String, String) -> [String]
      makeLines (fstString, sndString)
        | length sndString > num = fstString : (makeLines $ splitAt num sndString)
        | otherwise     = fstString : sndString : []

wrapLine が激しく無駄な気がする。が消し方がわからん。

解答を写経

foldWith = 60

main = do cs <- getContents
          putStr $ fold cs

fold cs = unlines $ concatMap foldLine $ lines cs

foldLine line = case splitAt foldWith line of
                  (s, [])   -> [s]
                  (s, cont) -> s : foldLine cont

なるほどー、そこでcaseか。ガードと引数でのパターンマッチだと、splitAtの適応のために無駄関数が一つ増えてしまうからなぁ。まだまだHaskellの感覚がつかめていない、ということだね。

[] 8.1節 値としての関数 00:03

特筆することもなく。あ、無名関数便利。

[] 8.2節 関数合成 00:03

直感的で、数学っぽい。

[] 8.3節 部分適用 00:03

なるほど!あのときの疑問が解決した!部分適用スバラシス

Haskellは本質的にはパラメタが1つの関数しか存在しないんだね。すばらしい。

[] 8.4節 ポイントフリースタイル 00:03

やりすぎるとワケワカメになる予感。でも、変数が消えるというのはなかなか面白い。大抵のプログラミング言語重要な要素である変数が、Haskellでは忌み嫌われている。言語の構成要素が少ないほうが、バグの原因が少ないから、その点でHaskellプログラマバグから解放してくれる可能性があるのかもしれない。でも、考え方になれないとなかなかきつい(´・ω・`)

[] 8.6節 練習問題 00:26

まずは自力で

lstrip :: String -> String
lstrip = dropWhile matchSpace

matchSpace :: Char -> Bool
matchSpace c = any (== c) [' ', '\t']

rstrip :: String -> String
rstrip = reverse . lstrip . reverse

strip :: String -> String
strip = lstrip . rstrip
main = do cs <- getContents
          putStrLn $ lastNLines 10 cs

lastNLines n = unlines . takeLast n . lines
takeLast n = reverse . take n . reverse

解答を写経

import Char

lstrip :: String -> String
lstrip = dropWhile isSpace

rstrip :: String -> String
rstrip = reverse . lstrip . reverse

strip :: String -> String
strip = rstrip . lstrip
main = do cs <- getContents
          putStr $ lastNLines 10 cs

lastNLines n = unlines . takeLast n . lines
takeLast n = reverse . take n . reverse

isSpaceを自作しちゃった以外は上出来じゃない?matchSpaceは、簡単にスペース文字を追加できるようになってるから、あとからスペース文字を増やすこともできるし、セクション勉強にもなったし、結果オーライってことで。

トラックバック - http://haskell.g.hatena.ne.jp/harg/20060825

2006-08-24

[] 7章 基本的な文法を流し読み 18:46

気になったところだけ。

アズパターン

func str@(c:cs)

func "hogehoge" #=> c = 'h', cs = "ogeoge", str = "hogehoge"

@の前後にスペースはおk? → OK

アズパターンネスト
func str @ (c: ttr @ (d: cs))
func "hogehoge" #=> str = "hogehoge", c = 'h', ttr = "ogehoge", d = 'o', cs = "gehoge"
トラックバック - http://haskell.g.hatena.ne.jp/harg/20060824