【问题标题】:Is there a way to return a pair of integers using the let construct in standard ML?有没有办法使用标准 ML 中的 let 构造返回一对整数?
【发布时间】:2020-07-06 14:21:07
【问题描述】:

我正在尝试使用 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】:

    问题不在于(sumFirst, sumSecond)let,而在于您的其余代码。

    基本情况和递归表明sumPairs 产生一个int,而不是一对ints。
    因此,当您尝试生成一对时会发生冲突。

    您的基本情况应该是(0,0),而不是0,因为它必须是一对。

    您还需要从递归中解构结果,因为这会产生一对,而不是整数。

    这样

    fun sumPairs nil = (0, 0)
      | sumPairs ((x,y)::zs) =
        let
            val (sumFirst, sumSecond) = sumPairs zs
        in 
            (x + sumFirst, y + sumSecond)
        end; 
    

    【讨论】:

    • 我试过你的建议,但还是编译不出来?‍♂️
    • 如果我复制并粘贴我的代码,它就可以工作。我认为你做错了什么。
    • 所以,你会认为我疯了......我不只是复制和粘贴你的代码......当我使用你的答案时,我完全重写了程序,但是当我这样做了,我输入了“val t = ([3,4], [4,5], [5,6]);"而不是“val t = [(3,4), (4,5), (5,6)];" ??
    猜你喜欢
    • 2015-10-11
    • 2023-02-08
    • 2019-07-13
    • 2012-08-28
    • 1970-01-01
    • 2022-01-17
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多