無限序列我知道無限序列可能在Haskell - 但是,我不完全知道如何生成一個生成哈斯克爾
給出的方法
generate::Integer->Integer
其採用整數並將產生序列中的下一個整數,我將如何建立一個無限序列呢?
無限序列我知道無限序列可能在Haskell - 但是,我不完全知道如何生成一個生成哈斯克爾
給出的方法
generate::Integer->Integer
其採用整數並將產生序列中的下一個整數,我將如何建立一個無限序列呢?
如果您希望您的序列從1開始,那麼它就是 -
iterate generate 1
請注意的函數,第一個字母是小寫,大寫沒有。否則,它將是數據類型,而不是函數。
//編輯:我剛剛意識到不只是數據類型以大寫開頭,它也可能是數據構造函數或類型類,但那不是重點。 :)
有幾種方法可以做到這一點,但一個是:
gen :: (a -> a) -> a -> [a]
gen f s = s : gen f (f s)
此功能需要一個functon f
和一些衣被合計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]
在上面的例子succ
充當其你提到的功能generate :: Integer -> Integer
。但請注意gen
可以與a -> a
類型的任何函數一起使用。
編輯:實際上,gen
與Prelude(和Data.List)中的函數iterate
相同。
添加到Matajon的答案:發現iterate
函數的一種方法,除了問這裏之外是使用Hoogle。
Hoogle's first answer for the query(a -> a) -> [a]
是iterate
。
傳播Hoogle意識的+1。 –
+1將我介紹給Hoogle:D – Martin