Я только что начал изучать Haskell
с приятным чтением «Учите вас Haskell для отличного блага!» и в книге есть пример, который для меня не имеет смысла. Это говорит о том, что следующий код будет выводить ту же случайную строку дважды:Использование глобального генератора случайных чисел через getStdGen в Haskell
main = do
gen <- getStdGen
putStrLn $ take 20 (randomRs ('a','z') gen)
gen2 <- getStdGen
putStrLn $ take 20 (randomRs ('a','z') gen2)
С другой стороны, если та же программа называется два раза, несомненно, дают различные выходы. Кроме того, что, кажется, не соответствует, если я сравниваю его с кодом ниже, который дает различные значения s1
и s2
:
main = do
s1 <- getLine
s2 <- getLine
putStrLn s1
putStrLn s2
Я задаюсь вопросом, как вышеупомянутые два примера различны.
Вызов 'randomRIO' или' randomIO' также должен быть изменен. – Carl
It * is * effectful, и когда вы ставите 'setStdGen' между ними, он возвращает другой случайный генератор. – Ingo