Error SML : Error: unbound variable or constructor: valof

Error SML : Error: unbound variable or constructor: valof

我正在参加华盛顿大学提供的编程语言课程,在其中一次讲座中,弹出这段代码对 Dan 教授有效,但是,我遇到了未绑定变量或 constructor:valof 错误。想不通。 它是 smlnj,在 emacs 上是 运行,如果它能产生任何帮助的话。

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

这是错误:options.sml:7.37-7.42 错误:未绑定变量或构造函数:valof

正如 quoify 所说,拼写为 valOf

而且正如 kopecs 所说,如果使用模式匹配,它会更短:

fun max1 (x::y::rest) = max1 (Int.max (x, y) :: rest)
  | max1 [x] = SOME x
  | max1 [] = NONE

(此版本还使用库函数 Int.max 以增加简洁性。)

如果太紧凑,您还可以这样写:

fun max1 (x::y::rest) = let val z = Int.max (x, y) in max1 (z::rest) end
  | max1 [x] = SOME x
  | max1 [] = NONE

幻灯片中的版本处理许多递归函数中出现的令人讨厌的情况,这些递归函数 return 求和类型 'a option:您可能需要执行调用,进行一些解包(即删除SOME),然后将结果打包回去(即再次添加 SOME)。

但是 max1 问题并不一定是这种情况。