Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 在列表理解中显式声明使用list.zip的类型_F# - Fatal编程技术网

F# 在列表理解中显式声明使用list.zip的类型

F# 在列表理解中显式声明使用list.zip的类型,f#,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->float类型,但 这里有i

我有下面的清单

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->float类型,但 这里有int类型

y>0
表达式中

是否有方法指示编译器,
x
y
是某种类型,或者
l1
l2
是同一类型

编辑:

我实际拥有的是类中的
a
,更新以反映该事实。

无论何时创建命名值,都可以指定如下类型:
y:int
。例如:
[对于1..10->y中的y:int]


正如评论中提到的,我认为这不会解决你的问题,但它可能会帮助你缩小你的消息来源的责任范围。一个可能的罪魁祸首是你对
l2
的定义。我猜您是在使用一个包含多个参数的函数来定义它,但未能提供足够的参数,导致函数类型为
float->float
,而不是仅为
float

,每当您创建一个命名值时,您可以这样指定类型:
y:int
。例如:
[对于1..10->y中的y:int]


正如评论中提到的,我认为这不会解决你的问题,但它可能会帮助你缩小你的消息来源的责任范围。一个可能的罪魁祸首是你对
l2
的定义。我猜您是在使用一个包含多个参数的函数来定义它,但是没有提供足够的参数,导致函数类型为
float->float
,而不是
float

如果l1和l2都是int列表,那么您的代码对我来说编译得很好。您可以展示l1和l2在代码中是如何声明的吗?如果我将
l1
l2
变量设置为
int list
,您的代码片段将在我的F#交互式窗口中工作。()从错误中看,l2实际上是一个函数列表
float->float
,而不是一个int列表。碰巧,你在那一行之后做了什么吗?假设@Lee是错误的(我不认为他是…),你可以这样指定类型:
[对于1..10->y中的(y:int)]
。不过,这是跟踪错误的一个好方法。如果l1和l2都是int列表,那么您的代码对我来说编译得很好。您可以展示l1和l2在代码中是如何声明的吗?如果我将
l1
l2
变量设置为
int list
,您的代码片段将在我的F#交互式窗口中工作。()从错误中看,l2实际上是一个函数列表
float->float
,而不是一个int列表。碰巧,你在那一行之后做了什么吗?假设@Lee是错误的(我不认为他是…),你可以这样指定类型:
[对于1..10->y中的(y:int)]
。不过,这是追踪错误的好方法。