题
我正在尝试制作一个函数阵列,该函数阵列正在列表中使用。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]
直接地。我看不出那比您的原始解决方案更好 min
和 max
, 不过,...也许您可以提供一些其他上下文,因此您要解决的问题要清楚。
不隶属于 StackOverflow