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