我有這樣的功能:SML型混亂
fun x (u,v,w) = (u::[v])::w;
它獲取的
fn: 'a * 'a * 'a list list -> 'a list list
返回類型,任何人都可以向我解釋如何這種類型從功能產生的?謝謝!
編輯:另外,我將如何調用這個功能?
我有這樣的功能:SML型混亂
fun x (u,v,w) = (u::[v])::w;
它獲取的
fn: 'a * 'a * 'a list list -> 'a list list
返回類型,任何人都可以向我解釋如何這種類型從功能產生的?謝謝!
編輯:另外,我將如何調用這個功能?
::
需要兩個參數 - 一個在左邊,一個在右邊。如果它的左參數類型爲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]]
。
當我使用您的示例調用它時,出現域錯誤。說操作數:int * int * int * list – user2796815
沒關係,我明白了。非常感謝你! – user2796815
有人回答後,您不應該用完全不同的問題替換您的問題。 – newacct
我已經回滾到原來的問題。如果你想問一個新問題,請不要編輯這個問題。 – molbdnilo
@OP:這就是所謂的類型推斷。你可能只是讓人們向你解釋什麼是類型推斷。 – Hibou57