tyamaguc07's hatenablog

考えたり調べたりしたことを書いていく。

http://gihyo.jp/dev/feature/01/functional-prog/0003 の正誤表

下の記事をやっていたら、説明が間違っていると思われる箇所や、うまく動かないサンプルコードがあったので正誤表を書いてみた。

Haskell歴2日なので、至らない点があるのであればご教授いただけると助かります。

gihyo.jp

図3の正誤表

mapに関数渡してなかった。

 -- '1'にisDigitが適用され,残りのリストにコンスされる
- isDigit '1' : map ['a']
+ isDigit '1' : map isDigit ['a']
 
 -- ↓
 
 -- isDigit '1'がTrueになる
- True : map ['a']
+ True : map isDigit ['a']
 

リスト1の正誤表

そのままだと動かなかった。

maxDupStrの定義に関しては、こうしたら動いたというだけなのでなんとも。

makePairの方は、単純に第一引数が抜け落ちてた。

 
 --最長重複文字列を計算する
 maxDupStr :: [Char] -> [Char]
-maxDupStr = extract . chooseMax . calcLen . makePair . sort . tails
+maxDupStr xs = extract(chooseMax(calcLen(makePair(sort(tails xs)))))
 
 --隣り合う要素を組にする
-makePair ::  -> [([Char], [Char])]
+makePair :: [[Char]] -> [([Char], [Char])]
 makePair xs = zip xs (tail xs)