far*_*own 2 recursion options sml
在我昨天的问题中,从SML中的列表中获取最大值,我在Andreas Rossberg的帮助下找到了如何使用SML来评估获取整数列表的Max的函数.
继续我的学习.修改了相同的代码以使用选项.这是代码
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
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
option?options有什么好处?对第一个问题的评论:不仅else-branch导致type的值,optionif-branch(即,NONE)也是如此.通常,if结构的两个分支必须具有相同的类型.
至于你的第二个问题.该option类型通常用于显式编码函数的偏好(即,如果输入没有正确的结果).在获取列表中包含的最大值的情况下,当输入为空列表时,会发生这种情况.有了你上一篇文章的功能,我们得到了
max [] = 0
Run Code Online (Sandbox Code Playgroud)
(在单词中:空列表中包含的最大值为0),这在某种程度上是错误的,因为我们例如也会得到
max [0] = 0
Run Code Online (Sandbox Code Playgroud)
为了区分这两种情况,我们可以使用该option类型,从而产生
max1 [] = NONE
max1 [0] = SOME 0
Run Code Online (Sandbox Code Playgroud)
返回一个选项类型的原因,在这种情况下是一个'int option,我们得到更细粒度的信息:首先,已经的类型max1,即int list => int option,告诉我们函数是部分的(我们可能得到SOME结果或NONE); 其次,每当我们NONE知道输入是空列表时.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |