如何递归地构建列表? ML

时间:2017-02-07 21:44:39

标签: list recursion ml

我必须编写一个递归函数,它接受三个元素的列表,并返回使用这三个元素创建的另一个列表。例如,我可能有一个像[a,b,c]这样的列表,一个函数需要多次a b c次。所以[2,3,5]会创建一个像[2,6,18,54,162,486]

这样的列表

我理解hd,tl,@和:: list运算符,但我不了解构建列表的逻辑。

如果我乘以hd([2,3,5])* hd(tl([2,3,5)),我将得到6。但是我在哪里附上呢?我需要在每个调用中使用新逻辑,以便在列表中更深入地将最后一个元素乘以3。

1 个答案:

答案 0 :(得分:1)

Example net using function multiply

关键是,你的递归函数应该返回列表,满足停止要求的调用应该返回空列表(或者一些起始列表)。

在这种情况下,函数将(a * b)追加到下一个值列表的开头。减少的c提供计数器,而中间结果(a * b)用作进一步向下计算的基础。所以这里的列表向后增长,从尾部的最大值到头部的最小值。