gpt4 book ai didi

sml - 使用 Options 获取 SML 中整数列表的最大值有什么好处

转载 作者:行者123 更新时间:2023-12-03 22:19:39 24 4
gpt4 key购买 nike

在我昨天的上一个问题中 Getting max value from a list in SML ,在 Andreas Rossberg 的帮助下,我弄清楚了如何使用 SML 评估获取整数列表最大值的函数。

继续我的学习。相同的代码被修改为使用选项。这是代码

fun max1 (xs : int list) =
if null xs
then NONE
else
let val tl_ans = max1(tl xs)
in
if isSome tl_ans andalso valOf tl_ans > hd xs
then tl_ans
else SOME (hd xs)
end

我有以下问题:

  1. 为什么else语句里面的代码会输出option类型的值?
  2. 使用选项有什么好处?

最佳答案

关于您的第一个问题的评论:不仅 else 分支会产生 option 类型的值,if 分支也是如此(即 NONE).通常,if 结构的两个分支必须具有相同的类型。

关于第二个问题。 option 类型通常用于显式编码函数的偏向性(即,如果没有合适的result 用于输入)。在获取列表中包含的最大值的情况下,当输入为空列表时会发生这种情况。借助您上一篇文章中的功能,我们得到

max [] = 0

(换句话说:空列表中包含的最大值为 0),这在某种程度上是错误的,因为例如我们也会得到

max [0] = 0

为了区分这两种情况,我们可以使用option 类型,结果是

max1 [] = NONE
max1 [0] = SOME 0

返回选项类型(在本例中为 'int option)的原因是我们可以获得更细粒度的信息:首先,已经是 max1 的类型,即 int list => int option,告诉我们该函数是部分函数(我们可能会得到 SOME 结果或 NONE);其次,每当我们得到 NONE 时,我们就知道输入是空列表。

关于sml - 使用 Options 获取 SML 中整数列表的最大值有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20832413/

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