This comment is reply for 2165 drop: 芸がない。そのくせ型という制約がある。(全ての組み合わせ). Go to thread root.
nobsun #2183(2007/08/14 18:29 GMT) [ Haskell ] Rating2/2=1.00
リストの数固定して、Dynamicを使うというのを書いてみました。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
import Data.Dynamic crossProduct2 :: (Typeable a, Typeable b) => [a] -> [b] -> [(a,b)] crossProduct2 ps qs = map tuple $ sequence $ [ map toDyn ps , map toDyn qs ] where tuple [p,q] = ( fromDyn p undefined , fromDyn q undefined ) crossProduct3 :: (Typeable a, Typeable b, Typeable c) => [a] -> [b] -> [c] -> [(a,b,c)] crossProduct3 ps qs rs = map tuple $ sequence $ [ map toDyn ps , map toDyn qs , map toDyn rs ] where tuple [p,q,r] = ( fromDyn p undefined , fromDyn q undefined , fromDyn r undefined ) crossProduct4 :: (Typeable a, Typeable b, Typeable c, Typeable d) => [a] -> [b] -> [c] -> [d] -> [(a,b,c,d)] crossProduct4 ps qs rs ss = map tuple $ sequence $ [ map toDyn ps , map toDyn qs , map toDyn rs , map toDyn ss ] where tuple [p,q,r,s] = ( fromDyn p undefined , fromDyn q undefined , fromDyn r undefined , fromDyn s undefined ) crossProduct5 :: (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => [a] -> [b] -> [c] -> [d] -> [e] -> [(a,b,c,d,e)] crossProduct5 ps qs rs ss ts = map tuple $ sequence $ [ map toDyn ps , map toDyn qs , map toDyn rs , map toDyn ss , map toDyn ts ] where tuple [p,q,r,s,t] = ( fromDyn p undefined , fromDyn q undefined , fromDyn r undefined , fromDyn s undefined , fromDyn t undefined ) -- Test data data RGB = Red | Green | Blue deriving (Typeable,Bounded,Enum,Show) data ENWS = East | North | West | South deriving (Typeable,Bounded,Enum,Show) allItem :: (Bounded a, Enum a) => [a] allItem = [minBound..maxBound] test = crossProduct4 (allItem::[()]) (allItem::[Bool]) (allItem::[RGB]) (allItem::[ENWS]) {- *Main> putStr $ unlines $ map show $ test ((),False,Red,East) ((),False,Red,North) ((),False,Red,West) ((),False,Red,South) ((),False,Green,East) ((),False,Green,North) ((),False,Green,West) ((),False,Green,South) ((),False,Blue,East) ((),False,Blue,North) ((),False,Blue,West) ((),False,Blue,South) ((),True,Red,East) ((),True,Red,North) ((),True,Red,West) ((),True,Red,South) ((),True,Green,East) ((),True,Green,North) ((),True,Green,West) ((),True,Green,South) ((),True,Blue,East) ((),True,Blue,North) ((),True,Blue,West) ((),True,Blue,South) -}
Rating2/2=1.00-0+
[ reply ]
nobsun
#2183()
[
Haskell
]
Rating2/2=1.00
Rating2/2=1.00-0+