我一直在尝试编写一个柯里化函数“multvec”,它使用 u=(u1, u2, ..., un) 和 v=(v1, v2, ..., vn) 并输出 u1*v1 + u2*v2 + ... + un*vn。我认为我的逻辑大部分是正确的(至少它会是其他语言......)但我不断得到:
stdin(11,57): error FS0001: This expression was expected to have type
'a list
but here has type
'c list * 'd list -> 'b list
代码如下: 问题显然出在最后一行对产品的调用中。但是,我的印象是基本情况 ( x * y )::[ ] 只会产生一个 'a 列表,而不是它实际产生的结果。
let rec multvec xs ys = function
| [ ], [ ] -> failwith "Both lists cannot be empty"
| x::[ ], y::[ ] -> ( x * y )::[ ]
| x::xs, y::ys -> let product = multvec xs ys
( x * y ) + ( List.reduce (+) product )
对此错误的任何澄清将不胜感激!先感谢您。