« Codeforces 35 | トップページ | ブログの内容は鵜呑みにしない方がいいですよ(笑) »

2012年2月24日 (金)

リストモナド

こちらのブログ経由でこの記事にたどり着きました。
一つめのコードは「指定した文字列の大文字小文字の組み合わせ全パターンの リストを取得する」というコードなんですが…確かに少し冗長な気がします。
私なら次のようなコードを書くかな…。

import Data.Char

getAllUpperLowerPattern :: String -> [String]
getAllUpperLowerPattern cs = foldr f [""] cs
  where f c css = concat [[toUpper c : cs, toLower c : cs] | cs <- css]

 

と思った後にこちらのブログをよく読んだら、リストモナドに「sequence」と いう関数があったんですね。
この関数を使えばコードがさらに簡潔になります。

import Data.Char

getAllUpperLowerPattern :: String -> [String]
getAllUpperLowerPattern cs = sequence [[toUpper c, toLower c] | c <- cs]

 

やっぱり、もっとモナドの勉強をしなければいけませんね…。

 

 

Date: 2012-02-24 12:48:56 JST

HTML generated by org-mode 6.33x in emacs 23

« Codeforces 35 | トップページ | ブログの内容は鵜呑みにしない方がいいですよ(笑) »

Haskell」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/54062495

この記事へのトラックバック一覧です: リストモナド:

« Codeforces 35 | トップページ | ブログの内容は鵜呑みにしない方がいいですよ(笑) »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ