y”ŠwŽÒzHaskell‚̓ ..
466:ƒfƒtƒHƒ‹ƒg‚Ì–¼–³‚µ‚³‚ñ
07/01/11 23:09:05
>>465
‚±‚ñ‚ÈŠ´‚¶‚ɂȂÁ‚½B‚₽‚ç‚Æ–Ê“|‚¾‚Á‚½‚̂ʼnü‘PˆÄ•åWB
{-# OPTIONS_GHC -fglawgow-exts #-}
module Test where
import System.Random
import Data.Array.IArray
import Data.Array.ST
import Control.Monad.ST
hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen)
hoge ia gi = runST act
@ where
@ @ act :: forall s. ST s (a i e, StdGen)
@ @ act = do
@ @ @ ma <- thaw ia
@ @ @ let _ = ma :: STArray s i e
@ @ @ g' <- shuffle ma gi first
@ @ @ ra <- unsafeFreeze ma
@ @ @ return (ra, g')
@ @ (first, last) = bounds ia
@ @ shuffle a g i = case ran of
@ @ @ [] -> return g
@ @ @ _:next:_ -> do
@ @ @ @ let (j, g') = randomR (i, last) g
@ @ @ @ x <- readArray a i
@ @ @ @ y <- readArray a j
@ @ @ @ writeArray a i y
@ @ @ @ writeArray a j x
@ @ @ @ shuffle a g' next
@ @ @ where
@ @ @ @ ran = range (i, last)
ŽŸƒy[ƒWÅVƒŒƒX•\ަƒXƒŒƒbƒh‚ÌŒŸõ—ÞŽ—ƒXƒŒˆê——˜b‘è‚̃jƒ…[ƒX‚¨‚Ü‚©‚¹ƒŠƒXƒg¥ƒIƒvƒVƒ‡ƒ“‚ð•\ަ‰É‚‚Ԃµ2ch
5389“ú‘O‚ÉXV/244 KB
’S“–:undef