明确说明使用List.zip的列表推导中的类型

时间:2015-01-09 16:33:43

标签: f#

我有以下列表理解

member this.a l1 = 
        let res = [for x, y in List.zip l1 this.l2 do if y > 0 then yield (x |> double)/(y |> double) else yield 0.]

我收到了错误

  

类型'(float - > float)'不支持比较'   约束。例如,它不支持“System.IComparable”'   接口

     

预计此表达式的类型为float - >漂浮但是   这里有int类型

y > 0表达式。

有没有办法指导编译器,xy是某种类型,还是l1l2属于同一类型?< / p>

修改
我实际拥有的是a在一个类中,更新以反映这一事实。

1 个答案:

答案 0 :(得分:4)

每当您创建命名值时,您都可以指定类型:y:int。例如:[for y:int in 1..10 -> y]

正如评论中所述,我认为这不会解决您的问题,但它可能会帮助您缩小您的资源来源。可能的罪魁祸首是您对l2的定义。我猜测你是使用一个带有多个参数的函数来定义它的,但却无法提供足够的参数,从而产生float->float类型的函数,而不仅仅是float