简单 ML 标准中的递归

Recursion In simple ML Standard

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

根据我的理解,我无法弄清楚这个程序是如何工作的: 我们输入 else 然后我们递归地调用 max(tl xs) 直到它命中 none 所以当我们有 none 我们检查 in 中的 if 并且它将是 false 然后我们 return 一些(高清 xs)。 问题是我无法理解这个程序是如何逐行工作的我觉得我错过了什么。

我怀疑你犯的错误是试图同时推理多个递归。
一次只关注一个函数调用。

示例:

max []就是NONE,如你所说。

接下来以max [2]为例

这是

let val tl_ans = max []
in
    if isSome tl_ans andalso valOf tl_ans > 2
    then
        tl_ans
    else
        SOME 2
end

也就是

if isSome NONE andalso valOf NONE > 2
then
    NONE
else
    SOME 2

这显然是 SOME 2

下一步,试试max [3,2]

这是

let val tl_ans = max [2]
in
    if isSome tl_ans andalso valOf tl_ans > 3
    then
        tl_ans
    else
        SOME 3
end

你知道 max [2]SOME 2,所以这是

if isSome (SOME 2) andalso valOf (SOME 2) > 3
then
    SOME 2
else
    SOME 3

SOME 3.

等等...