ネタ記録庫

StateT †

これは、permutationを返す関数:

permutation' :: [[Int]] -> Int -> [Int] -> [[Int]]
permutation' result 0 _ = result
permutation' result n cand =
    do a <- cand
       permutation' (map (a:) result) (n-1) [x|x<-cand,x/=a]

使い方

permutation' [[]] [1,2,3] 2

のように使う。

これをStateTを使ってわざと分かりにくくしてみる:

permutation :: [[Int]] -> Int -> StateT [Int] [] [[Int]]
permutation result 0 = return result
permutation result n =
    do cand <- get
       a <- lift cand
       put [x|x<-cand,x/=a]
       permutation (map (a:) result) (n-1) 

これは

runStateT (permutation [[]] 2) [1,2,3]

のように使う。

  • Thx. 勉強になります。 -- げんま? 2007-04-24 (火) 12:45:05

HaskellでWIKI &dagger;

書いてみました。いまのところ日本語は使えません。 http://icecs.ice.nuie.nagoya-u.ac.jp/~h043078b/wiki.cgi

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS