我正在尝试使用sml中的let构造返回一对和。我尝试过的每种方法都只会返回一个值。我尝试过使用cons(::)创建一个列表,然后返回该列表,但这同样会产生错误。
val t = [(3,4), (4,5), (5,6)];
fun sumPairs(nil) = 0
| sumPairs((x,y)::zs) =
let
val sumFirst = x + sumPairs(zs)
val sumSecond = y + sumPairs(zs)
in
(sumFirst, sumSecond) <how would I return this as a tuple or list?>
end;
sumPairs(t);
问题不是与(sumFirst, sumSecond)
或let
有关,而是与其余代码有关。
[基本情况和递归说明sumPairs
产生一个int
,而不是一对int
。因此,尝试生成一对时会发生冲突。
您的基本情况应该是(0,0)
,而不是0
,因为它必须是一对。
您还需要从递归解构结果,因为这会产生一对,而不是整数。
喜欢这个
fun sumPairs nil = (0, 0)
| sumPairs ((x,y)::zs) =
let
val (sumFirst, sumSecond) = sumPairs zs
in
(x + sumFirst, y + sumSecond)
end;