我一直在尝试编写一个使用u =(u1,u2,...,un)和v =(v1,v2,..., vn)并输出u1 * v1 + u2 * v2 + ... + un * vn。我觉得我有逻辑大多正确的(至少它会在其他语言...),但我不断收到:F#函数 - 预期类型与实际不同
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):: []只会产生一个'列表,而不是实际产生的东西。
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)
任何澄清这个错误将不胜感激!先谢谢你。
谢谢!您列出的所有方法都非常出色。我想我需要阅读更多介绍F#的文档,因为它与我习惯的其他语言非常不同。 – wmarquez 2013-03-03 07:21:00