u=(u1, u2, ..., un) および v=(v1, v2, ..., vn) を使用し、u1*v1 + u2*v2 を出力するカリー化された関数「multvec」を作成しようとしています。 + ... + 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
コードは次のとおりです。問題は明らかに最後の行の product への呼び出しにあります。ただし、基本ケース ( 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 )
このエラーを明確にしていただければ幸いです。前もって感謝します。