Mar*_*tin 2 haskell infinite-sequence
我知道在Haskell中有无限的序列是可能的 - 但是,我不完全确定如何生成一个
给定一种方法
generate::Integer->Integer
Run Code Online (Sandbox Code Playgroud)
取一个整数并生成序列中的下一个整数,我将如何构建一个无限序列呢?
Mar*_*náš 14
如果你想让你的序列从1开始那么它是 -
iterate generate 1
Run Code Online (Sandbox Code Playgroud)
请注意,函数的第一个字母是小写,而不是大写.否则它将是数据类型,而不是函数.
//编辑:我刚才意识到不仅数据类型以大写字母开头,它也可能是数据构造函数或类型类,但这不是重点.:)
yai*_*chu 13
添加到Matajon的答案:iterate除了在这里询问之外,发现功能的一种方法是使用Hoogle.
Hoogle对该查询的第一个答案 (a -> a) -> [a]是iterate.
有几种方法可以做到,但其中一种方法是:
gen :: (a -> a) -> a -> [a]
gen f s = s : gen f (f s)
Run Code Online (Sandbox Code Playgroud)
这个函数需要一个功能f和一些valus 并s返回s,之后它会调用自己的相同f,以及结果f s.示范:
Prelude> :t succ
succ :: (Enum a) => a -> a
Prelude> let gen f s = s : gen f (f s)
Prelude> take 10 $ gen succ 3
[3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
在上面的例子中succ充当generate :: Integer -> Integer你提到的功能.但请注意,这gen将适用于任何类型的函数a -> a.
编辑:实际上,gen与iteratePrelude(和Data.List)中的函数相同.