Functional programming SML:使用addToEach方法的前缀

Functional programming SML:使用addToEach方法的前缀,functional-programming,sml,Functional Programming,Sml,我正在努力解决这个问题,因为我不确定如何递归实现它(我可以强制实现) 列表l的前缀和是列表s,其中s的第i个索引元素是l的前i+1个元素的和 我必须使用addToEach函数,我编写如下: fun addToEach(number : int, nil : int list) : int list = nil | addToEach(number : int, x::y : int list) = (x + number)::addToEach(number, y);

我正在努力解决这个问题,因为我不确定如何递归实现它(我可以强制实现)

列表l的前缀和是列表s,其中s的第i个索引元素是l的前i+1个元素的和

我必须使用addToEach函数,我编写如下:

fun addToEach(number : int, nil : int list) : int list = nil
    | addToEach(number : int, x::y : int list) =
        (x + number)::addToEach(number, y);
我想做的是循环遍历我的列表l,假设我在索引j处,将索引j处的数字添加到列表s中的所有元素0-(j-1)。不过,我并不确定如何递归地执行此操作


谢谢你的帮助

将给定索引处的数字添加到列表其余部分的点(索引j+1,j+2,…而不是0,…,j-1):

下面是一种不使用
addToEach
的方法,它使用尾部递归辅助函数:

fun prefixSum' (sums, []) = sums
|   prefixSum' ([], x::xs) = prefixSum' ([x],xs)
|   prefixSum' (y::ys, x::xs) = prefixSum' ((x+y)::y::ys,xs);
fun prefixSum xs = rev (prefixSum'([],xs));
例如,
prefixSum'[2,3,4,5]=[14,9,5,2]
——这是向后的(在使用尾部递归函数构建列表时常见的问题)。所以,只要在主函数中反转它:

fun prefixSum' (sums, []) = sums
|   prefixSum' ([], x::xs) = prefixSum' ([x],xs)
|   prefixSum' (y::ys, x::xs) = prefixSum' ((x+y)::y::ys,xs);
fun prefixSum xs = rev (prefixSum'([],xs));