我正在尝试制作一个函数阵列,该函数阵列正在列表中使用。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)[]当'_a:比较
将“ minimax”定义为简单的数据术语,请使其具有显式参数的函数,或者,如果您不打算将其为通用,请添加类型注释。

我添加了这样的类型注释:

let minimax = [|(List.min:TreeOfPosition list -> TreeOfPosition); List.max|]

它编译了。现在的问题是列表。

| BranchP(position, children) -> List.reduce (minimax.[minOrmax]) (List.map (loop (1 - minOrmax)) children)

类型不匹配。期待树植物 - > treeofposition-> treeofposition,但给定的树置列表 - > treeofposition类型的“ treeofposition”与“ Treeofposition list”类型不匹配

感谢您的任何提示,

佩德罗·杜斯索(Pedro Dusso)

有帮助吗?

解决方案

问题是 min 在两个值上运行 List.min 在值列表上操作,因此您不能仅将一个函数替换为另一个函数。自从 List.min 基本定义为 List.reduce min, ,您可能只能摆脱 List.reduce 并申请 minimax[minormax] 直接地。我看不出那比您的原始解决方案更好 minmax, 不过,...也许您可以提供一些其他上下文,因此您要解决的问题要清楚。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top