Soy nuevo en Haskell y me pregunto cómo y si puedo hacer que este código sea más eficiente y ordenado. Parece innecesariamente largo y desordenado.Mejorar el código para generar una distribución
Mi secuencia de comandos genera una lista de 10 promedios de 10 monedas.
import Data.List
import System.Random
type Rand a = StdGen -> Maybe (a,StdGen)
output = do
gen <- newStdGen
return $ distBernoulli 10 10 gen
distBernoulli :: Int -> Int -> StdGen -> [Double]
distBernoulli m n gen = [fromIntegral (sum x)/fromIntegral (length x) | x <- lst]
where lst = splitList (randomList (n*m) gen) n
splitList :: [Int] -> Int -> [[Int]]
splitList [] n = []
splitList lst n = take n lst : splitList (drop n lst) n
randomList :: Int -> StdGen -> [Int]
randomList n = take n . unfoldr trialBernoulli
trialBernoulli :: Rand Int
trialBernoulli gen = Just ((2*x)-1,y)
where (x,y) = randomR (0,1) gen
Cualquier ayuda sería apreciada, gracias.
lo siento, yo lo expliqué mal. básicamente estoy tratando de crear los datos para construir la distribución normal estándar. virtualmente volteando una moneda (con el resultado 1 o -1) 10 veces, y tomando el promedio del resultado, obtenemos -0.2. al hacer este proceso digamos 1000 veces, podemos trazar los resultados y su frecuencia y obtener la distribución normal. Estoy tratando de crear una lista de dobles que puedo trazar para dibujar esta distribución. – Ash
para aclarar, el resultado de este script podría ser [0.2,0.0,0.0, -0.4,0.6,0.0, -0.2,0.2,0.4,0.0] – Ash