如何在收集渐进输出的同时重复某个函数一定次数?

How to repeat a function a certain number of times while collecting progressive outputs?

我看过类似的问题,但没有找到我的具体问题的解决方案。我有一个字符串列表,我在其中使用自己的映射函数将其映射到另一个函数。这是一个没有描述函数名称的示例函数:

functionName :: [String] -> [String]

functionName [] = []

functionName(x:xs) = otherFunction x : functionName xs

我需要能够重复此函数 25 次,向我建议的一种方法是获取列表 [1..25],然后使用 (x:xs).这可能吗?我在想它可能是这样的:

thirdFunction :: [Int] -> [String] -> [String]

thirdFunction(x:xs) (y:ys) = ?? functionName : ?? thirdFunction

我不知道我会在上面的行中放什么,但是 x:xs 和 y:ys 有两个参数而不是一个参数。我大约 5 天前才开始使用 Haskell,所以我只知道有限的使用它的可能性和正确的语法。

编辑: 基于上一个,我需要 25 组不同的输出。所以我正在获取我的字符串列表,然后通过函数更改每个字符串(我们称之为 output1)。然后我使用 output1 并通过相同的函数过程再次更改它,然后使 output2

您在编辑中描述的内容已通过 iterate . map:

完成
> :t \f -> iterate (map f)
\f -> iterate (map f) :: (a -> a) -> [a] -> [[a]]

> take 3 $ iterate (map (10 +)) [1..3]
[[1,2,3],[11,12,13],[21,22,23]]

> take 3 . drop 1 $ iterate (map (10+)) [1..3]
[[11,12,13],[21,22,23],[31,32,33]]

iterate 永远持续下去,因此您需要 take 从其输出中提取一定数量的结果,在您的情况下 take 25。如果您对原始输入不感兴趣,可以使用 drop 1.

跳过它