2015-10-13 75 views
1

我想問一下如何在SML/NJ中概念性地解釋[]::[][]::[]::[]解釋sml中的[] :: [],[] :: [] :: [

我的想法:

我認爲[]::[]會產生錯誤或產生一個空的列表,但實際上它產生val it = [[]] : 'a list list

後,我知道[]::[]產生[[]] : 'a list list,我認爲[]::[]::[]會產生[[[]]] : 'a list list list但實際上它產生[[],[]] : 'a list list

+2

你知道'::'運算符的類型和它的相關性嗎? – Bergi

+3

你可能想嘗試用'([] :: []):: []'來看看它是如何區別於[] ::([] :: [])'(以及你所嘗試的) – Bergi

回答

7

::是右關聯:在a::b::c::[] A,B,C必須是同一類型的元素和

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

這仍然是正確的,即使一個,b,c是[]:

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