【发布时间】:2020-12-24 11:25:02
【问题描述】:
这是一个产生无限随机数列表的函数
import System.Random
values :: [Int]
values = map fst $ scanl (\(r, gen) _ -> randomR (1,10) gen) (randomR (1,10) (mkStdGen 1)) $ repeat ()
我想将重复元素的序列减少为一个元素,例如 [2,3,4,1,7,7,7,3,4,1,1,1,3,..] -> [2,3,4,1,7,3,4,1,3 ,..]
所以,我需要一些来自 [Int] -> [Int] 的优雅函数 "f" 来执行此操作。 此外,它必须懒惰地使用无限列表,所以如果我运行
f values
不能挂起并实时输出数据
【问题讨论】:
-
f = map head . group -
values的表达式可以简化为randomRs (1,10) (mkStdGen 1)