0
我想編寫一個函數,它將組合OCaml中列表中的所有元素。夠簡單了,到目前爲止,我有一個工作功能:列表OCaml類型錯誤
let rec comAll (f : 'a -> 'a -> 'a) (r : 'a) (l : 'a list) : 'a =
match l with [] -> r
| hd::tl -> let comAll2 = comAll f r tl in f hd comAll2
;;
的第一個參數是一個函數,第二個是一個默認值返回時/如果輸入列表是空的,而第三個參數是列表本身。
此功能按預期工作,除了當我嘗試調用它使用其他功能,例如:
let inList (l : 'a list) (e : 'a) : bool = comAll (fun x y -> if x == e then true else y) false l ;;
將通過一個函數,返回inList : bool list -> bool -> bool = <fun>
不過,我想,而不是使其返回inList : 'a list -> 'a -> bool = <fun>
我試着改爲將comAll定義爲:let rec comAll f r l =...
,那可行,但我想用明確的類型聲明該函數。
任何幫助或指導我在做什麼不正確在這裏?
好的,但爲了我正在工作的目的,是否有辦法讓它使用'a - >'a - >'a'? – Jeremy
不,沒有。你想傳遞一個不是''a - >'a - >'a'類型的函數。 –
好的。謝謝您的幫助。我想我現在已經掌握了它 – Jeremy