Mic*_*ron 2 haskell functional-programming readability
我做了这个功能:
-- Generates multiple random values
randoms :: (Random a) => StdGen -> Int -> a -> a -> ([a], StdGen)
randoms rndGen nbrsCount min max = randomNbrs' nbrsCount min max ([], rndGen) where
randomNbrs' rndGen 0 min max cumul = cumul
randomNbrs' rndGen count min max cumul = randomNbrs' rndGen (count-1) min max (values, snd rndGen') where
rndGen' = randomR (min, max) rndGen
values = fst rndGen' : values
Run Code Online (Sandbox Code Playgroud)
而且难以阅读.因为我是Haskell的新手,所以我无法找到如何提高其可读性.如何使这更容易阅读和更简洁?
我真的很喜欢MonadRandom
在这些情况下使用:
import Control.Monad.Random
randomsR :: (Random a, RandomGen b) => b -> Int -> a -> a -> ([a], b)
randomsR gen nb min max = flip runRand gen -- run the random monad
. sequence -- get the random monad out of the list
. replicate nb -- generate nb values
$ getRandomR (min, max) -- the generator for one value
Run Code Online (Sandbox Code Playgroud)
你也可以缩短它(感谢Ørjan):
randomsR :: (Random a, RandomGen b) => b -> Int -> a -> a -> ([a], b)
randomsR gen nb min max = flip runRand gen
. replicateM nb
$ getRandomR (min, max)
Run Code Online (Sandbox Code Playgroud)
要么
randomsR :: (Random a, RandomGen b) => b -> Int -> a -> a -> ([a], b)
randomsR gen nb min max = flip runRand gen
. fmap (take nb)
$ getRandomRs (min, max)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
133 次 |
最近记录: |