Есть ли способ вернуть пару целых чисел, используя конструкцию let в стандартном ML? - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь вернуть пару сумм, используя конструкцию let в sml. Каждый способ, который я пробовал, будет возвращать только одно значение. Я попытался создать список с помощью 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);

1 Ответ

0 голосов
/ 26 марта 2020

Проблема не в (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; 
...