1

我正在尝试创建一个函数数组,我在 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 :
compare 将 '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 列表”类型不匹配

感谢您的任何提示,

佩德罗·杜索

4

1 回答 1

4

问题是min对两个值List.min进行操作,但对值列表进行操作,因此您不能只用一个函数替换另一个函数。由于List.min基本上定义为List.reduce min,您可能只需摆脱List.reduce并直接应用minimax[minormax]即可。我看不出这比使用minand的原始解决方案有什么更好的max地方,但是……也许您可以提供一些额外的上下文,以便更清楚地了解您要解决的问题。

于 2010-06-22T22:05:30.307 回答