मैं हास्केल के लिए नया हूं और मुझे आश्चर्य है कि कैसे/अगर मैं यह कोड अधिक कुशल और साफ कर सकता हूं। यह अनावश्यक रूप से लंबे और अस्पष्ट लगता है।वितरण उत्पन्न करने के लिए कोड में सुधार
मेरी लिपि 10 सिक्का फ्लिप के 10 औसत की एक सूची उत्पन्न करती है।
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
किसी भी मदद की सराहना की जाएगी, धन्यवाद।
खेद का स्वागत करते हैं, मैं बुरी तरह से समझाने की थी। मैं मूल रूप से मानक सामान्य वितरण बनाने के लिए डेटा बनाने की कोशिश कर रहा हूं। वस्तुतः एक सिक्का (परिणाम 1 या -1 के साथ) 10 बार, और परिणाम की औसत ले कर, हम कहते हैं -0.2। इस प्रक्रिया को करके 1000 बार कहते हैं, हम परिणाम और उनकी आवृत्ति को साजिश कर सकते हैं और सामान्य वितरण प्राप्त कर सकते हैं। मैं युगल की एक सूची बनाने की कोशिश कर रहा हूं कि मैं इस वितरण को आकर्षित करने के लिए साजिश कर सकता हूं। स्पष्टीकरण के लिए – Ash
, इस स्क्रिप्ट का परिणाम [0.2,0.0,0.0, -0.4,0.6,0.0, -0.2,0.2,0.4,0.0] हो सकता है – Ash