【发布时间】:2016-04-21 05:22:26
【问题描述】:
这里我有一个函数可以生成 0 到 999 之间的随机数流。
randomHelp :: RandomGen g => g -> [Int]
randomHelp g = zipWith (mod) (map fst $ iterate (next . snd) $ next $ snd $ split g) $ repeat 1000
我想从上面定义的流中选择所有数字,并且每个 elem(i) 和 elem(i + 1) 都必须尊重适当性。例如,他们的 gcd 必须是一个。我能想到的只是一个折叠函数,因为我可以从包含数字 1 的累加器开始(假设 1 将是我要显示的第一个元素)然后我检查折叠函数的适当性,如果它受到尊重,我添加累加器的元素,但问题是我认为由于stackoverflow而导致程序阻塞。
函数如下:
randomFunc :: RandomGen g => g -> [Int]
randomFunc g = foldl (\acc x -> if (gcd x (last acc) == 1) then acc ++ [x] else acc) [1] (randomHelp g)
注意:我不想使用显式递归。
【问题讨论】:
标签: haskell