ПРОСТАЯ генерация случайных чисел

Я пишу это после долгого разочаровывающего исследования, и я надеюсь, что кто-нибудь здесь сможет просветить меня по этой теме.

Я хочу сгенерировать простое рандомное число в haskell-функции, но увы, это кажется невозможным без всяких нетривиальных элементов, таких как монады, присваивание в "do", создание генераторов и т.п.

В идеале я искал эквивалент C "rand()". Но после долгих поисков я почти уверен, что такой вещи не существует, из-за того, как устроен язык.(Если есть, просветите меня кто-нибудь). Поскольку это не представляется возможным, я хотел бы найти способ получить случайное число для моей конкретной проблемы и общее объяснение того, как это работает, чтобы получить случайное число.

prefixGenerator :: (Ord a, Arbitrary a) => Gen ([a],[a])
prefixGenerator = frequency [ 
    (1, return ([],[])),
    (2, do {
            xs1 <- orderedListEj13 ;
            xs2 <- orderedListEj13 ;
            return (xs1,xs2)
       }),
    (2, do {                
            xs2 <- orderedListEj13 ;
            return ((take RANDOMNUMBERHERE xs2),xs2)
       })
    ]

Я пытаюсь разобраться с QuickCheck, но моя неспособность использовать случайные числа усложняет задачу. Я пробовал что-то вроде this(поместив drawInt 0 (длина xs2) вместо RANDOMNUMBERHERE), но я застрял с тем фактом, что для взятия требуется Int, и этот метод оставляет мне IO Int, который кажется невозможным преобразовать в Int согласно this.

5
задан ehird 16 March 2012 в 21:26
поделиться