положи этот список в стейт, и вытаскивай элементы по одному
Можно, пожалуйста, подробнее, и в хаскельских терминах, чтобы я хотя бы знал, что гуглить
контекст: import Control.Monad.State.Strict getSeed :: IO Int вариант 1: у тебя есть функция которая из прошлого числа генерит следующее next :: Int -> Int random :: MonadState Int m => m Int random = do modify' next; get main = do seed <- getSeed flip evalStateT seed do print =<< random print =<< random вариант 2: у тебя есть бесконечный список случайных чисел randoms :: Int -> [Int] random :: MonadState [Int] m => m Int random = state \(x:xs) -> (x, xs) main = do seed <- getSeed flip evalStateT (randoms seed) do print =<< random print =<< random
А определять getSeed никак не надо?
в принципе между вариантами разницы никакой, вариант со списком не будет сильно менее оптимальным
список тут не нужен, я его для демонстрации использовал. нужна тебе только функция перехода от одного состояния-числа к другому
Ну я в итоге так и пытался сделать, но всё же не смог реализовать изменение состояния. Сейчас таки пытаюсь добраться до админов codeforces, чтобы random по умолчанию добавили.
https://play.haskell.org/saved/ERRl8eeU
Обсуждают сегодня