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

时间:2015-10-13 19:12:40

标签: functional-programming sml smlnj cons

我想问一下如何在SML / NJ中概念性地解释[]::[][]::[]::[]

我的想法:

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

在我知道[]::[]生成[[]] : 'a list list之后,我认为[]::[]::[]会生成[[[]]] : 'a list list list,但事实上它会生成[[],[]] : 'a list list

1 个答案:

答案 0 :(得分:7)

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

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

即使a,b,c为[]:

,这仍然是正确的
[]::[]::[]::[] = [[],[],[]]