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# 类型'';列表';不支持运算符'+';_F#_Functional Programming_Type Inference_Currying - Fatal编程技术网

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而不是一个列表,所以现在它可以工作了。