gpt4 book ai didi

pattern-matching - SML 如何定义适当的选项

转载 作者:行者123 更新时间:2023-12-02 05:16:35 25 4
gpt4 key购买 nike

为什么下面的代码不起作用?

fun sum_list xs =
case xs of
[] => NONE
| x::xs' => SOME (x+sum_list xs')

当我删除 SOME 而不是 NONE 为零时,此代码运行良好。我知道对于一个空列表的总和来说,零是合理的答案。但是为什么下面的例子会失败呢?

更新:按照 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

最佳答案

问题在于该函数返回一个'a option,但在 lat 表达式中您使用它就好像它返回一个 int:

x + sum_list xs'

您必须构建一个只在列表中工作并返回数字(而不是选项)的内部函数,然后将最终结果装箱到一个选项中,或者在返回到时评估 sum_list 的结果查看它是否包含一个值或者它是 NONE。两种方式我都可以写,但你应该在看到写出的解决方案之前尝试一下。

关于pattern-matching - SML 如何定义适当的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14552287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com