Page List

Search on the blog

2011年10月29日土曜日

Haskell模写修行(1)

"New Zealand Autumn" by Abaconda
 
 モナドを実装したり、メモ化したり、コンビネータを書いたりとかしたけど、Haskellらしいコードが全然書けない。一応は動くものは書けるけど、どうも命令型で関数型っぽくない。ということで、Haskellらしいコードが書けるように修行する。

 "らしい"コードを書けるようになるためには、素晴らしいプログラマが書いた"らしい"コードをたくさん読んで吸収していくのが一番じゃないかなと思う。ということで、しばらく以下をやっていこうと思います。
  1. codeforceの問題をHaskellで解く
  2. ratingの高いHaskellerが書いたコードと自分のコードを比べる
  3. いいところを吸収する

自分が書いたコード:


  1. import Char  
  2.   
  3. isVowel 'a' = True  
  4. isVowel 'i' = True  
  5. isVowel 'u' = True  
  6. isVowel 'e' = True  
  7. isVowel 'o' = True  
  8. isVowel 'y' = True  
  9. isVowel 'A' = True  
  10. isVowel 'I' = True  
  11. isVowel 'U' = True  
  12. isVowel 'E' = True  
  13. isVowel 'O' = True  
  14. isVowel 'Y' = True  
  15. isVowel x = False  
  16.   
  17. addDot   [] = []  
  18. addDot (x:xs) = '.' : x : addDot xs  
  19.   
  20. main = do   
  21.          input <- getLine  
  22.          putStrLn . map toLower . addDot . filter (not . isVowel ) $ input  
  23.            


お手本コード(bjin氏参考):

  1. import Char  
  2. g x | x < '0' || elem x "aoyeui" = ""  
  3.     | 1 > 0           = '.':[x]  
  4. main = interact $ concatMap (g.toLower)  

ポイント:
  1. elem
  2. concatMap
  3. interact
 ”Haskellらしい”うんぬんより、まず便利な関数を覚えていくところからかな。

0 件のコメント:

コメントを投稿