F# 类型'';列表';不支持运算符'+';
下面的F# 类型'';列表';不支持运算符'+';,f#,functional-programming,type-inference,currying,F#,Functional Programming,Type Inference,Currying,下面的auxInner返回一个int列表。但是,当我在随后的内部函数中调用List.sum(auxInner xs ys)时,我得到了这个奇怪的错误!不List.sum接受整数列表吗 let rec auxInner xs ys = match (xs, ys) with |([],[]) -> [] |([], ys) -> ys |(xs, []) -> xs |(x::xs, y::ys) -> x*y::auxInner x
auxInner
返回一个int列表。但是,当我在随后的内部
函数中调用List.sum(auxInner xs ys)
时,我得到了这个奇怪的错误!不List.sum
接受整数列表吗
let rec auxInner xs ys =
match (xs, ys) with
|([],[]) -> []
|([], ys) -> ys
|(xs, []) -> xs
|(x::xs, y::ys) -> x*y::auxInner xs ys
let rec inner xs ys =
match (xs, ys) with
|([],[]) -> []
|([], ys) -> ys
|(xs, []) -> xs
|(xs, ys) -> List.sum(auxInner xs ys)
internal
的另一种模式返回一个列表,因此list.sum(auxInner xs ys)
也必须返回一个列表。另一方面,List.sum在类型上使用一些定义的(+)来进行求和。
正如前面所说,求和必须是一个列表,因此我们需要一种方法以某种方式求和列表。
由于没有为列表定义(+),因此您会收到该错误消息
您很有可能在匹配的每种情况下都必须返回一个int,或者在每种情况下都返回一个列表,可能是一个singleton
[list.sum(auxInner xs ys)]
但没有上下文…谢谢!我更改了它,使每个模式都返回一个int而不是一个列表,所以现在它可以工作了。