是否有使用标准ML中的let构造返回一对整数的方法?

问题描述 投票:0回答:1

我正在尝试使用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);
return local ml let
1个回答
0
投票

问题不是与(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; 
© www.soinside.com 2019 - 2024. All rights reserved.