如何在Haskell中重复一个函数列表

5

我希望有一个无限的函数列表,可以循环某些模式。例如:[(+), (-), (+), (-), ...]

如果我这样做:

fmap repeat [(+), (-)]

接下来我得到了嵌套列表[[a -> a -> a]]。如何以最佳方式获得一个遵循此类模式的单一无限函数列表?


2
你可以使用 concat (repeat [(+), (-)])。不要使用 fmap repeat,那会得到多个无限列表,你需要将它们合并。 - Bergi
谢谢。我曾考虑过将repeat应用于列表内容以避免嵌套,但我意识到那样做是行不通的。 - northlane
1个回答

13
您需要的是 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,...]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接