我想做一个函数数组,我在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