גילוי מספרים אקראיים

Haskell:
גילוי מספרים אקראיים

איך לעשות:

כדי לייצר מספרים אקראיים בהסקל, בדרך כלל משתמשים בחבילת random, שהיא חלק מפלטפורמת ההסקל. הנה מדריך צעד אחר צעד:

ראשית, וודאו שחבילת ה-random מותקנת. אם לא, תוכלו להשיג אותה דרך Cabal או Stack.

לייצר מספר אקראי

כדי לייצר מספר אקראי פשוט, תוכלו להשתמש בפונקציה randomRIO, שיוצרת ערך אקראי בתוך טווח מצוין.

import System.Random (randomRIO)

main :: IO ()
main = do
  randomNumber <- randomRIO (1, 10) :: IO Int
  putStrLn $ "Random number: " ++ show randomNumber

לייצר רשימה של מספרים אקראיים

לייצר רשימה של מספרים אקראיים הוא קצת יותר מורכב אך עדיין פשוט:

import System.Random (randomRIO)

randomList :: Int -> IO [Int]
randomList 0 = return []
randomList n = do
  r <- randomRIO (1, 100)
  rs <- randomList (n-1)
  return (r:rs)

main :: IO ()
main = do
  numbers <- randomList 5
  print numbers

קטע הקוד הזה יוצר פונקציה randomList שמייצרת רשימה של מספרים שלמים אקראיים. החליפו את (1, 100) בטווח הרצוי שלכם.

צלילה עמוקה

חבילת random של הסקל מספקת מחולל מספרים אקראיים פסבדו (PRNG), מה שאומר שהמספרים שנוצרים אינם באמת אקראיים אך יכולים להיראות כאקראיים למגוון יישומים. ליבת היכולת לייצר אקראיות בהסקל נמצאת במחלקת הטיפוס RandomGen, שמופשטת שיטות שונות של ייצור מספרים אקראיים, ובמחלקת הטיפוס Random, שכוללת טיפוסים שניתן לייצר אותם באופן אקראי.

בהיסטוריה, הגישה של הסקל לייצור מספרים אקראיים הדגישה טהרה וניתנות לשחזור. זו הסיבה שפעולות הכוללות אקראיות מטופלות באופן מפורש במונאד IO או דורשות העברה ועדכון ידניים של מצבי המחוללים - כדי לשמר שקיפות רפרנציאלית.

ביישומים מסוימים, כגון קריפטוגרפיה, המספרים הפסבדו אקראיים שמיוצרים על ידי ה-PRNG המוגדר כברירת מחדל אולי לא יהיו מאובטחים מספיק. לשימושים אלו, מתכנתי הסקל לעיתים קרובות פונים לספריות מתמחות יותר כמו crypto-random, שתוכננו כדי לעמוד בדרישות המחמירות של יישומים קריפטוגרפיים.

שם זה, ספריות חלופיות כמו mwc-random מציעות ביצועים טובים יותר ואיכות של מספרים אקראיים לסימולציות ויישומים אחרים, על ידי מימוש אלגוריתמים מודרניים כמו המרסן טוויסטר.

כאשר בוחרים גישה לייצור מספרים אקראיים בהסקל, יש לשקול בצורה אינטליגנטית את צרכי היישום לגבי איכות האקראיות, הביצועים והאבטחה כדי לבחור את הכלי או הספריה המתאימים ביותר.