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
问题并不一定是这种情况。
我正在参加华盛顿大学提供的编程语言课程,在其中一次讲座中,弹出这段代码对 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
问题并不一定是这种情况。