2015-10-24 73 views
0

auxInner下面返回一个int列表。但是当我在随后的inner函数中调用List.sum(auxInner xs ys)时,我得到这个奇怪的错误! List.sum不是int列表吗?类型''列表'不支持运算符'+'

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) 

回答

2

inner回报的其它图案的列表,以便List.sum(auxInner xs ys)必须返回一个列表了。
另一方面,List.sum使用一些定义的(+)在类型上进行求和。
而且这个求和必须是前面所说的列表,所以我们需要一种方式来总结列表。
由于没有为列表定义(+),因此您会收到该错误消息。

有很大的机会,你要么必须返回一个int在比赛中的每一种情况下,或者返回一个列表,每一种情况下,也许一个单[List.sum (auxInner xs ys)]但没有背景......

+0

谢谢!我改变它,以便每个模式返回一个int而不是一个列表,所以现在它工作。 –