kolay yolu rastgele pakette var, modül System.Random
kullanmaktır, bu nedenle muhtemelen ilk yüklemeniz gerekir.
Bu modül typeclasses tanımlar.
class RandomGen g where
next :: g -> (Int,g)
-- ...
class Random r where
random :: RandomGen g => g -> (a,g)
randomR :: RandomGen g => (r,r) -> g -> (a, g)
typeclass, sen uygulamak zorunda özgü, Random birinci fonksiyonu (ikinci hiçbir mantıklı olarak, sadece randomR = const random
gibi uygulayabilirsiniz Ne random
yapar mı? girdi olarak, size bunun için gerekenleri oluşturmak ve geri yeni jeneratör vermek zorunda rastgele jeneratör almak
sizin rastgele değerler üretmek için, böyle State
monad, ya da bir şey kullanabilirsiniz ya:.
random g = (myResult,gn) where
(random1,g1) = next g
(random2,g2) = next g2
-- ...
Daha sonra bu işlev tarafından sistemlerini rastgele jeneratör kullanabilirsiniz:
randomIO :: Random r => IO r
Bu önceden belirlenir ve her çağrı farklı bir değeri verir. Ancak son olarak, Rastgele örneğinizi nasıl tanımlayacağınıza kendiniz karar vermelisiniz.
Mükemmel yanıt için teşekkürler, ancak <$> ile ne demek istiyorsunuz? – SirLenz0rlot
Ah, 'Control.Applicative' den - sadece bazı basitleştirilmiş sözdizimi, bir işlevi rastgele bir değere uygulayabileceğiniz anlamına gelir. – Dario
Sadece 'fmap' – fuz