2017-08-12 23 views
5

我想要有一个循环遍历某些模式的函数的无限列表。例如:[(+), (-), (+), (-), ...]如何在Haskell中重复函数列表

如果我这样做

fmap repeat [(+), (-)] 

然后我得到的嵌套列表[[a -> a -> a]]。按照这样的模式获得单个无限功能列表的最佳方式是什么?

+2

你可以使用'concat(repeat [(+),( - )])'。不要'fmap repeat',这会让你得到多个无限列表,你必须合并。 – Bergi

+0

谢谢。我想我可以重复列表中的内容来避免嵌套,但我意识到为什么这样做不起作用。 – northlane

回答

13

你所寻找的是cycle :: [a] -> [a]

cycle [(+),(-)]

类型此表达的是:

Prelude> :t cycle [(+),(-)] 
cycle [(+),(-)] :: Num a => [a -> a -> a] 

cycle接受一个列表[a]和生产,在那里重复给定的列表上,并列表再次。所以cycle [1,2,3]产生[1,2,3,1,2,3,1,2,3,1,...]