Tôi mới sử dụng Haskell và tôi tự hỏi làm thế nào/nếu tôi có thể làm cho mã này hiệu quả hơn và gọn gàng hơn. Dường như không cần thiết lâu dài và rối rắm.Cải thiện mã để tạo phân phối
Tập lệnh của tôi tạo một danh sách 10 giá trị trung bình là 10 xu lật.
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
Mọi trợ giúp sẽ được đánh giá cao, cảm ơn.
xin lỗi, tôi đã giải thích nặng. tôi về cơ bản đang cố tạo dữ liệu để xây dựng bản phân phối chuẩn chuẩn. bằng cách lật một đồng xu (với kết quả 1 hoặc -1) 10 lần, và lấy trung bình của kết quả, chúng ta sẽ nói -0.2. bằng cách thực hiện quá trình này nói 1000 lần, chúng ta có thể vẽ kết quả và tần suất của chúng và thu được phân bố chuẩn. tôi đang cố gắng để tạo ra một danh sách các đôi mà tôi có thể vẽ để phân phối này. – Ash
để làm rõ, kết quả của tập lệnh này có thể là [0,2,0,0,0,0, -0,4,0,6,0,0, -0,2,0,2,0,4,0,0] – Ash