SML Jak zdefiniować właściwą opcję
Dlaczego poniższy kod nie działa?
fun sum_list xs =
case xs of
[] => NONE
| x::xs' => SOME (x+sum_list xs')
Ten kod działa dobrze, gdy zamiast NONE jest zero i gdy usuwam SOME. Wiem, że dla sumy pustej listy zero jest rozsądną odpowiedzią. Ale dlaczego poniższy przykład zawodzi?
Aktualizacja: sprawdziła się, postępując zgodnie z odpowiedzią 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