如何在Haskell中实现无限的函数列表

时间:2016-12-01 16:11:13

标签: list haskell fibonacci

我正在使用Fibonacci函数g的一个版本:

g :: Integer -> Integer -> Integer
g i n  |  i==0   = 0
       |  i==1   = n
       |  i>1    = (n*( (g (i-1) n) + (g (i-2) n) ))

...使得g i n是gi(n)的值,而部分定义g i是gi

我现在想要定义一个无限的函数列表:gs :: [ Integer -> Integer ],这样(gs !! i) is gi

我想要5美元[ g 3 | g <- gs]给我[0,3,9,36,135]

任何人都可以帮我定义这个无限列表吗?

1 个答案:

答案 0 :(得分:4)

您可以使用[0 ..]获取从0开始的所有数字的列表。完成后,只需将g应用于每个人。

您可以使用列表推导来执行此操作,就像您在示例用法中所做的那样:

gs = [g i | i <- [0 ..]]

或使用地图:

gs = map g [0 ..]