在 sml 中解释 []::[]、[]::[]::[]

Interpreting []::[], []::[]::[] in sml

我想问一下[]::[][]::[]::[]在SML/NJ中是如何从概念上解释的。

我的想法:

我认为 []::[] 会产生错误或产生一个空列表,但实际上它会产生 val it = [[]] : 'a list list

知道[]::[]生成[[]] : 'a list list后,我以为[]::[]::[]会生成[[[]]] : 'a list list list,但实际上会生成[[],[]] : 'a list list

:: 是右结合的:在 a::b::c::[] 中 a,b,c 必须是相同类型的元素并且

a::b::c::[] = a::(b::(c::[]))
            = a::(b::[c])
            = a::[b,c]
            = [a,b,c]

即使 a,b,c 是 [],这仍然成立:

[]::[]::[]::[] = [[],[],[]]