我正在使用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]
。
任何人都可以帮我定义这个无限列表吗?
答案 0 :(得分:4)
您可以使用[0 ..]
获取从0开始的所有数字的列表。完成后,只需将g
应用于每个人。
您可以使用列表推导来执行此操作,就像您在示例用法中所做的那样:
gs = [g i | i <- [0 ..]]
或使用地图:
gs = map g [0 ..]