如果条件为假,Haskell迭代

时间:2017-10-24 22:20:13

标签: haskell

我有一组数字。例如set = [1,3,4,5,6,7,8]。我需要编写一个循环,它只会选择总数小于max = 30的元素。

for(int i = 0;i<set.length();i++) { total = total + set[i]; if (total <= max) return i; }
.....
elements are from 0 to returned index

我不知道如何只使用一个循环在haskell中递归执行。

1 个答案:

答案 0 :(得分:2)

沿着列表走下去,发出元素,直到它们的总量太大。所以:

thePriceIsRight max (x:xs) | x <= max = x : thePriceIsRight (max-x) xs
thePriceIsRight _ _ = []

在ghci:

> thePriceIsRight 30 [1,3,4,5,6,7,8]
[1,3,4,5,6,7]