首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型- List.reduce和定义的类型之间不匹配

类型- List.reduce和定义的类型之间不匹配
EN

Stack Overflow用户
提问于 2010-06-23 05:29:55
回答 1查看 170关注 0票数 1

我正在尝试创建一个函数数组,我正在List.reduce HOF中使用它。我曾经有一个

代码语言:javascript
复制
let minimax = [| (min : int->int->int); max |]

它工作得很好,但现在我想获得列表的最大值,所以我想:

代码语言:javascript
复制
let minimax = [|List.min; List.max|]

但是,这会抛出以下错误:

Minimax.fs(175,5):错误FS0030:值限制。已推断值' minimax‘具有泛型类型val minimax:('_a list -> '_a) [] when '_a : comparison

要么将“minimax”定义为一个简单的数据术语,使其成为一个具有显式参数的函数,或者,如果您不希望它成为泛型,则添加一个类型注释。

我添加了一个类似如下的类型注释:

代码语言:javascript
复制
let minimax = [|(List.min:TreeOfPosition list -> TreeOfPosition); List.max|]

它被编译了。现在的问题是List.reduce,

代码语言:javascript
复制
| BranchP(position, children) -> List.reduce (minimax.[minOrmax]) (List.map (loop (1 - minOrmax)) children)

类型不匹配。应为TreeOfPosition -> TreeOfPosition -> TreeOfPosition,但给定了TreeOfPosition list -> TreeOfPosition,类型“TreeOfPosition”与类型“TreeOfPosition list”不匹配

谢谢你的建议,

佩德罗·杜索

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-23 06:05:30

问题是min对两个值进行操作,而List.min对一列值进行操作,因此您不能只用一个函数替换另一个函数。因为List.min基本上被定义为List.reduce min,所以您可能只需要去掉List.reduce,直接应用minimax[minormax]即可。不过,我看不出这会比你最初使用minmax的解决方案好多少……也许你可以提供一些额外的上下文,这样你就可以更清楚地知道你试图解决的是什么问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3097293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档