SML Como definir a opção apropriada
Por que o código a seguir não funciona?
fun sum_list xs =
case xs of
[] => NONE
| x::xs' => SOME (x+sum_list xs')
Esse código funciona bem quando em vez de NONE é zero e quando eu removo SOME. Eu sei que para a soma de uma lista vazia, o zero é a resposta razoável. Mas por que o exemplo a seguir falha?
Atualização: Fez isso funcionar seguindo a resposta de Diego:
fun sum_list xs =
case xs of
[] => NONE
| x =>
let
fun slist x =
case x of
[] => 0
| x::xs' => x + slist xs'
in
SOME (slist x)
end