Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 如何在收集渐进式输出的同时重复一定次数的功能?_Function_Haskell_Pattern Matching_Mapping_Repeat - Fatal编程技术网

Function 如何在收集渐进式输出的同时重复一定次数的功能?

Function 如何在收集渐进式输出的同时重复一定次数的功能?,function,haskell,pattern-matching,mapping,repeat,Function,Haskell,Pattern Matching,Mapping,Repeat,我研究过类似的问题,但没有找到解决我具体问题的方法。我有一个字符串列表,其中我使用自己的map函数将其映射到另一个函数。这是一个没有描述函数名称的示例函数: functionName::[String]->[String] functionName[]=[] functionName(x:xs)=其他函数x:functionName xs 我需要能够重复这个函数25次,有人向我建议的一种方法是获取列表[1..25],然后使用(x:xs)的版本将我的函数映射到该列表。这可能吗?我想可能是这样的:

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

functionName::[String]->[String]

functionName[]=[]

functionName(x:xs)=其他函数x:functionName xs

我需要能够重复这个函数25次,有人向我建议的一种方法是获取列表[1..25],然后使用(x:xs)的版本将我的函数映射到该列表。这可能吗?我想可能是这样的:

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

thirdFunction(x:xs)(y:ys)=??函数名:??第三个功能

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

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

您在编辑中描述的内容通过
迭代完成。地图

> :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 25
。如果您对原始输入不感兴趣,可以使用
drop 1

跳过它。除了查看
迭代
——或者尝试实现
doTimes::Int->(a->a)->a->a
(使用递归)您想要一个包含25个单独结果的列表,还是希望将函数应用于自己的输出25次,还是别的什么?@chepner这其实是我忘了提到的,我需要25套不同的输出,基于上一套。因此,我将获取字符串列表,然后通过函数更改每个字符串,这就是输出字符串。然后,我将获取该输出并通过相同的函数过程再次更改它,但我需要一个单独的输出。那可能是(或至少使用)
scanr
,那么,我可以问一下为什么您使用
drop 1
而不是
tail
?这是风格上的还是因为性能/语义上的差异?@Will Ness,这正是我想要的,非常感谢@这里的用户它完全没有区别,我甚至最初使用了
tail
我自己,但是--
tail
有时会出错(用Haskell的术语来说是“部分的”),而
drop 1
从不出错。因此,养成一个好习惯,永远不要使用
tail
,而是始终使用
drop 1
。少担心一件事。:)@罗伯特佩罗内:不客气您可以“接受”答案,表示问题已解决。:)此外,为了更快地得到更好的答案,必须具体和具体。给出具体的例子,以及他们想要的和实际的行为。干杯,:)