次のコードが機能しないのはなぜですか?
fun sum_list xs =
case xs of
[] => NONE
| x::xs' => SOME (x+sum_list xs')
このコードは、NONEの代わりにゼロであり、SOMEを削除した場合にうまく機能します。空のリストの合計については、ゼロが妥当な答えであることを私は知っています。しかし、なぜ次の例は失敗するのでしょうか?
更新: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