我想问一下如何在SML / NJ中概念性地解释[]::[]
和[]::[]::[]
。
我的想法:
我认为[]::[]
会生成错误或生成空列表,但事实上它会生成val it = [[]] : 'a list list
。
在我知道[]::[]
生成[[]] : 'a list list
之后,我认为[]::[]::[]
会生成[[[]]] : 'a list list list
,但事实上它会生成[[],[]] : 'a list list
答案 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为[]:
,这仍然是正确的[]::[]::[]::[] = [[],[],[]]