我知道在Haskell中有无限的序列是可能的 - 但是,我不完全确定如何生成一个
给出方法
generate::Integer->Integer
取一个整数并生成序列中的下一个整数的,我将如何构建一个无限序列呢?
答案 0 :(得分:14)
如果您希望序列从1开始,那么它是 -
iterate generate 1
请注意功能的第一个字母是小写,而不是大写。否则它将是数据类型,而不是函数。
//编辑:我刚才意识到不仅数据类型以大写开头,它也可能是数据构造函数或类型类,但这不是重点。 :)
答案 1 :(得分:13)
添加到Matajon的答案:除了在这里询问之外,发现iterate
功能的方法是使用Hoogle。
Hoogle's first answer for the query (a -> a) -> [a]
是iterate
。
答案 2 :(得分:5)
有几种方法可以做到,但其中一种方法是:
gen :: (a -> a) -> a -> [a]
gen f s = s : gen f (f s)
此函数使用功能f
和一些valus s
并返回s
,之后它会使用相同的f
调用自身,并返回{{1}的结果}}。示范:
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]
充当您提及的函数succ
。但请注意generate :: Integer -> Integer
将适用于gen
类型的任何函数。
编辑,实际上,a -> a
与Prelude(和Data.List)中的函数iterate
相同。