hayaのHaskell日記

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,

NaynaNayna2012/07/24 04:57Shoot, so that's that one suoppses.

mwvefiszrlomwvefiszrlo2012/07/25 01:491v8ALD <a href="http://zrtyvictpndf.com/">zrtyvictpndf</a>

bexeodojrrbexeodojrr2012/07/25 07:46IqkzZE , [url=http://upqpknufzvuz.com/]upqpknufzvuz[/url], [link=http://wteolqzruuzb.com/]wteolqzruuzb[/link], http://tbhnpxrqrzgn.com/

eprlrfexakzeprlrfexakz2012/07/26 18:39MVjUav <a href="http://seqyjtwwhoix.com/">seqyjtwwhoix</a>

トラックバック - 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は、簡単にスペース文字を追加できるようになってるから、あとからスペース文字を増やすこともできるし、セクション勉強にもなったし、結果オーライってことで。

MohammadMohammad2012/05/02 18:21I ltieallry jumped out of my chair and danced after reading this!

pavgsqfjpavgsqfj2012/05/03 11:28xqgVIZ <a href="http://qjelzltbtkpo.com/">qjelzltbtkpo</a>

lyvvjyxlhlyvvjyxlh2012/05/03 15:13K6fhGU , [url=http://ubxrucmfpltn.com/]ubxrucmfpltn[/url], [link=http://gughlccdruix.com/]gughlccdruix[/link], http://erinivqtnqns.com/

zqefrczqefrc2012/05/04 15:45jVpRsW <a href="http://egcyxsybgnsz.com/">egcyxsybgnsz</a>

jcisbfksmcjcisbfksmc2012/05/05 16:04pcPkE8 , [url=http://wjbzmimoanyc.com/]wjbzmimoanyc[/url], [link=http://rcfbqnmfncrw.com/]rcfbqnmfncrw[/link], http://saucybmfgegy.com/

jcisbfksmcjcisbfksmc2012/05/05 16:05pcPkE8 , [url=http://wjbzmimoanyc.com/]wjbzmimoanyc[/url], [link=http://rcfbqnmfncrw.com/]rcfbqnmfncrw[/link], http://saucybmfgegy.com/

トラックバック - 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

2006-08-22

[] 6.2節 真偽値 18:15

Bool型の値。&&演算子と、||演算子、not演算子さえ知っておけば後は問題ないでしょ。

[] 6.3節 数値 18:15

整数

  • Int型 ... ふつうは32bit signed な整数値。重要なことは、上限があるということ。
  • Integer型 ... 上限がない整数値。

IntとIntegerはHaskellが自動で判断して使い分けるらしい。Integerを使うことを明示したいときは、

12 :: Integer

と::構文を使ってやる。

浮動小数点数

  • Float型 ... 単精度
  • Double型 ... 倍精度

こちらもHaskell勝手に判断して使い分けるらしいので、必要に応じて::構文で明示する。

変換

  • toInteger x ... x ( :: Int)をIntegerに変換
  • fromInteger x ... x (:: Integer)を文脈に合った数値型に変換
  • fromIntegral x ... x (:: Integer or Int)を文脈に合った数値型に変換
  • ceiling x ... x (:: Float or Double)を、xを下回らない整数に変換(切り上げ)
  • floor x ... x (:: Float or Double)を、xを上回らない整数に変換(切り捨て)
  • trancate x ... x(:: Float or Double)を、xと0の間でもっともxに近い整数に変換
  • round x ... x(:: Float or Double)を、xに最も近い整数に変換

他にも数があるもんね

[] 6.4節 CharString 18:32

CharStringおいしい関係

文字リテラルリストが文字列。以上。

特殊文字

大体ふつうのプログラミング言語といっしょ。

ほげほげ

ふがふが

[] 6.5節 タプル 18:32

タプル、それは愛

タプルとは、複数の値の組。リストは要素に同じ型のものしか許さない厳格さがあるが、タプルはどんな型でも寛容に受け入れる深い慈愛に満ちた存在である。しかし、1要素のタプルは存在することはゆるされない。これは、人は一人では生きていけないという教訓を暗示しているものである。

まじめにリテラルとか

タプルのリテラルは、()で要素全体を囲み、複数の要素を,(カンマ)で区切って書く。

ユニット、それは真実

人類が生まれる遥か昔、宇宙は無であった。しかし、無でありながらも宇宙は愛に満たされていた。そう、タプルである。この無でありながらも愛に満たされた状態を、人々はユニットと呼んだ。転じて、無、すなわち何も値がない状態も、ユニットと呼ばれるようになった。

まじめにユニットリテラルとか

()

タプルに関係する関数

[] 6.6節 リスト 18:51

リストの真の姿

[1,2,3]

のような、リストリテラルを使った表記は略記法であり、真の姿は:演算子を使った

1 : 2 : 3 : []

らしい。

数列表記

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

これは便利かもしれない。

他にもいろいろ試してみる。

[1.5, 2.5..] #=> [1.5, 2.5, 3.5, 4.5 ......]
[1.1..] #=> [1.1, 2.1, 3.1, 4.1, .....]
[1, 3..10] #=> [1, 3, 5, 7, 9]
[0.0, 0.4..1.0] #=> [0.0, 0.4, 0.8]
[0.0, 0.39..1.0] #=> [0.0, 0.39, 0.78, 1.17]

数列記法の[x, y..z]で、x + (y - x) * n がちょうどzにならない場合は、どうやら x + (y - x) * n で最もzに値が近いものに丸められているみたい。まあ、浮動小数点なんかは、代数的には一致するけど、実際のCPU上での演算ではzと一致しないこともよくあるしね。ちゃんと確認してないけど、[0.0, 0.4..1.0]なんかでわかるように、最後の要素の候補として0.8と1.2がある場合は、小さいほうの0.8で打ち切られるっぽい。

[] 6.7節 実習:cat -n コマンド 19:11

本を伏せて書くのである


main = do cs <- getContents
          putStrLn $ attrLineNum cs

attrLineNum :: String -> String
attrLineNum cs = unlines $ map layoutLineTuple $ zipLines $ lines cs

zipLines :: [String] -> [(Int, String)]
zipLines lines = zip [1..] lines

layoutLineTuple :: (Int, String) -> String
layoutLineTuple (n, line) = replicate (6 - length (show n)) ' ' ++ (show n) ++ " " ++ line

show nが2回出てきているのはDRYでなくあまり美しくない。ちょうどふつケルのrjustを簡約した形になった。

[] 6.8節 練習問題 20:24

次のソースコードはそれぞれどのように解析されるか。括弧を使って答えよ。

Q1:
resolve f (x:xs) = textify x ++ resolve f xs
Q2:
getenv key env = fromMaybe &quot;&quot; $ lookup key env
Q3:
readTemplate id = readFile $ prefix repo ++ "/" ++ id

さて、解いてみる

あたりの決まりに注意すればできるかな

A1
resolve f (x:xs) = (textify x) ++ (resolve f xs)
A2
getenv key env = (fromMaybe &quot;&quot; (lookup key env))
A3
readTemplate id = readFile ((prefix repo) ++ "/" ++ id)
Q3を間違えた

readTemplate id = readFile ((prefix repo) ++ "/" ++ id)

readTemplate id = readFile ((prefix repo) ++ ("/" ++ id))

著者の青木さんは結合の順番を間違えていたっぽい。

...

(゜д゜)

つい先日買ったばかりなのに第一刷!?

富山で買わずにAmazonで買えばよかったorz

ReynaldoReynaldo2007/05/11 17:13http://cb7a416616f2eb5dba240cf5837ca9fd-t.eslyki.info <a href="http://cb7a416616f2eb5dba240cf5837ca9fd-h.eslyki.info">cb7a416616f2eb5dba240cf5837ca9fd</a> [url]http://cb7a416616f2eb5dba240cf5837ca9fd-b1.eslyki.info[/url] [url=http://cb7a416616f2eb5dba240cf5837ca9fd-b2.eslyki.info]cb7a416616f2eb5dba240cf5837ca9fd[/url] [u]http://cb7a416616f2eb5dba240cf5837ca9fd-b3.eslyki.info[/u] 1918e506ec14eb4ca3235afa2674a1a4

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