我想做一個函數數組,我在List.reduce HOF中使用。 我曾經有一個List.reduce和定義類型之間的類型不匹配
let minimax = [| (min : int->int->int); max |]
這是偉大的工作,但現在我希望得到一個列表的最大值,所以我想:
let minimax = [|List.min; List.max|]
然而,這引發以下錯誤:
Minimax.fs(175,5):錯誤FS0030:值限制。值'minimax'已被推斷爲具有通用類型 val minimax:('_a list - >'_a)[]當_a時:比較
將'minimax'定義爲簡單數據項,使其成爲函數明確的參數,或者,如果你不打算它是通用的,添加一個類型註釋。
我添加類型註釋是這樣的:
let minimax = [|(List.min:TreeOfPosition list -> TreeOfPosition); List.max|]
,它編譯。現在的問題是與List.reduce,
| BranchP(position, children) -> List.reduce (minimax.[minOrmax]) (List.map (loop (1 - minOrmax)) children)
類型不匹配。期待TreeOfPosition - > TreeOfPosition - > TreeOfPosition但鑑於一個TreeOfPosition列表 - > TreeOfPosition類型 'TreeOfPosition' 不匹配類型 'TreeOfPosition列表'
感謝您的任何提示,
佩德羅Dusso
是的,我錯過了一些情景化,但你的提示(因爲List.min基本上定義爲List.reduce min)工作得很好!謝謝! – 2010-06-23 00:24:09