我希望有一个无限的函数列表,可以循环某些模式。例如:[(+), (-), (+), (-), ...]
如果我这样做:
fmap repeat [(+), (-)]
接下来我得到了嵌套列表[[a -> a -> a]]
。如何以最佳方式获得一个遵循此类模式的单一无限函数列表?
我希望有一个无限的函数列表,可以循环某些模式。例如:[(+), (-), (+), (-), ...]
如果我这样做:
fmap repeat [(+), (-)]
接下来我得到了嵌套列表[[a -> a -> a]]
。如何以最佳方式获得一个遵循此类模式的单一无限函数列表?
cycle :: [a] -> [a]
。<b>cycle</b> [(+),(-)]
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,...]
concat (repeat [(+), (-)])
。不要使用fmap repeat
,那会得到多个无限列表,你需要将它们合并。 - Bergi