[英]OCaml Type and Type Inference
我在確定OCaml類型時遇到了一些麻煩。 為什么以下表達式的類型為:
let f x y z = z (y::x)
'a list->'a->('a list->'b)->'b
z (y::x)
是什么意思? 我知道y::x
意味着將元素y
附加到列表x
,但是z
做什么?
謝謝!
首先,請注意y::x
將元素y
添加到列表x
,而不是追加 。
f
類型的四個部分可以解釋如下:
f
的第一個參數是x
,因此f
類型的第一部分是'a list
,這與在f
的定義中使用x
作為列表一致。 f
類型的第二部分是'a
,這與將元素y
前置到列表x
,因為如果x
是'a list
,則y
必須是'a
。 f
的第三個參數是z
,它必須是一個函數,它將'a list
作為它的第一個參數,給出它在f
的定義中的用法。 因此f
類型的第三部分是('a list -> 'b)
,其中'b
是z
的返回類型。 f
的返回類型與z
的返回類型相同,因此f
類型的最后部分是'b'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.