2015-10-24 100 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而不是一個列表,所以現在它工作。 –