2013-12-12 173 views
0

我有這樣的功能:SML型混亂

fun x (u,v,w) = (u::[v])::w; 

它獲取的

fn: 'a * 'a * 'a list list -> 'a list list 

返回類型,任何人都可以向我解釋如何這種類型從功能產生的?謝謝!

編輯:另外,我將如何調用這個功能?

+3

有人回答後,您不應該用完全不同的問題替換您的問題。 – newacct

+0

我已經回滾到原來的問題。如果你想問一個新問題,請不要編輯這個問題。 – molbdnilo

+0

@OP:這就是所謂的類型推斷。你可能只是讓人們向你解釋什麼是類型推斷。 – Hibou57

回答

2

::需要兩個參數 - 一個在左邊,一個在右邊。如果它的左參數類型爲t,那麼它的正確參數必須是t list

因此,::具有類型('a * 'a list) -> 'a list,因爲t是任意的,因此表示爲'a

因此,如果您的代碼爲(u::[v]),那麼您告訴SML u : t'v : t對於某些類型t。該表達式然後是t list,因此要將其用作::的左邊參數,則正確參數w必須具有類型t list list

然後這給(u::[v])::w的類型是t list list對於某些t

總結:
u : t
v : t
w : t list
(u::[v])::w : t list list

所有某種類型t

因此,x的類型是('a * 'a * 'a list) -> 'a list list,因爲t是任意的。

要調用此函數,您可以執行一些類似於x(1,2,[3,4])的操作,該操作將提供列表[[1,2],[3,4]]

+0

當我使用您的示例調用它時,出現域錯誤。說操作數:int * int * int * list – user2796815

+0

沒關係,我明白了。非常感謝你! – user2796815