我正在尝试编写SML以从第一个列表中获取输入(让X),添加第二个列表的第一个X元素并存储在第三个列表中,使用REF ri1;//REF存储列表1的当前索引 ri2;//REF存储列表2的当前索引 !ri1=0//从索引0开始 !ri2=0//从索引0开始 一个正在运行的函数!下钻1'次,执行以下操作 从列表2中添加元素!ri2到LIST2!ri2+!ri1; 将结果存储在列表3中; 使现代化ri1=!ri1+1; 使现代化ri2=!ri2+!ri1;

我正在尝试编写SML以从第一个列表中获取输入(让X),添加第二个列表的第一个X元素并存储在第三个列表中,使用REF ri1;//REF存储列表1的当前索引 ri2;//REF存储列表2的当前索引 !ri1=0//从索引0开始 !ri2=0//从索引0开始 一个正在运行的函数!下钻1'次,执行以下操作 从列表2中添加元素!ri2到LIST2!ri2+!ri1; 将结果存储在列表3中; 使现代化ri1=!ri1+1; 使现代化ri2=!ri2+!ri1;,sml,mutable,Sml,Mutable,我认为这个f符合你的要求: fun f([], _) = [] | f(x::xs, ys) = f'(0, xs, x, ys) and f'(z, xs, 0, ys) = z::f(xs, ys) | f'(z, xs, n, y::ys) = f'(z + y, xs, n - 1, ys) | f'(_) = raise Empty 甚至不要尝试引用和索引。这不是任何人用ML编写此类代码的方式,而且比必要的要复杂得多。你应该能够在一个三行递归函数中表达同样的内容。谢谢你的

我认为这个f符合你的要求:

fun f([], _) = []
  | f(x::xs, ys) = f'(0, xs, x, ys)
and f'(z, xs, 0, ys) = z::f(xs, ys)
  | f'(z, xs, n, y::ys) = f'(z + y, xs, n - 1, ys)
  | f'(_) = raise Empty

甚至不要尝试引用和索引。这不是任何人用ML编写此类代码的方式,而且比必要的要复杂得多。你应该能够在一个三行递归函数中表达同样的内容。谢谢你的展示!这就是我需要做的清单1[2,3,2,1…];清单2[2,4,5,6,7,8,5,6,3,4,2,2,1,1];List11=2 so List21+List22-2项合计;然后List12=3,因此List23+List24+List25-3项相加;然后List13=2,所以List26+List27-2项求和。。。哦,对不起,我误读了你的算法。更新了答案。这能满足你的需要吗?