我正在尝试创建一个函数数组,我正在List.reduce HOF中使用它。我曾经有一个
let minimax = [| (min : int->int->int); max |]它工作得很好,但现在我想获得列表的最大值,所以我想:
let minimax = [|List.min; List.max|]但是,这会抛出以下错误:
Minimax.fs(175,5):错误FS0030:值限制。已推断值' minimax‘具有泛型类型val minimax:('_a list -> '_a) [] when '_a : comparison
要么将“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 list -> TreeOfPosition,类型“TreeOfPosition”与类型“TreeOfPosition list”不匹配
谢谢你的建议,
佩德罗·杜索
发布于 2010-06-23 06:05:30
问题是min对两个值进行操作,而List.min对一列值进行操作,因此您不能只用一个函数替换另一个函数。因为List.min基本上被定义为List.reduce min,所以您可能只需要去掉List.reduce,直接应用minimax[minormax]即可。不过,我看不出这会比你最初使用min和max的解决方案好多少……也许你可以提供一些额外的上下文,这样你就可以更清楚地知道你试图解决的是什么问题。
https://stackoverflow.com/questions/3097293
复制相似问题