在Haskell中使用递增的不同参数运行函数n次

时间:2018-10-28 11:53:38

标签: haskell

我有一个简单的Haskell函数,可以计算特定类型的总和:

usum :: Integral a => [a] -> a -> a
usum (x:xs) max = sum (nub [num*k | num <- (x:xs), k <- [1..div max num]])

x:xs保持不变但max从1达到某个上限的情况下递增+1的情况下,如何运行此函数 n 次?

如果usum是用Java之类的面向对象语言实现的,那么我将执行以下操作:

for (int i = 0; i < limit; i++)
{
   System.out.println(usum(i));
}

如何在Haskell中实现等效的for循环?

2 个答案:

答案 0 :(得分:4)

可以通过列表[1..n]来实现计数器。可以使用map函数来实现循环体。结合两者,您将得到:

f xs n = map (usum xs) [1..n]

输出:

> f [1,2,3] 10
[1,3,6,10,15,21,28,36,45,55]

答案 1 :(得分:2)

您使用了usum的列表理解来迭代k的所有值。您也可以使用类似的方法在n上进行迭代:

foo xs n = [usum xs m | m <- [1..n]]