我到处检查过,我似乎无法找到问题所在。编译器给我这个错误:“error FS0039: The value or constructor 'dotProduct' is not defined
”。但dotProduct目前已定义。
Visual Studio 2010还突出显示第二个let(let rec dotProductAux list1 list2 acum =
)表示表达式未完成。
let dotProduct list1 list2 =
let rec dotProductAux list1 list2 acum =
match list1 ,list2 with
| [],l | l,[] -> acum
| head1 :: tail1, head2 :: tail2 -> let updated = (head1 * head2) + acum
(dotProductAux tail1 tail2 updated)
此代码相乘并添加两个列表,如下所示:
dotProduct [1;4;7] [3;4;1];; //(1*3) + (4*4) + (7*1)
我是F#的新手,似乎无法正确使用此代码。有什么帮助吗?
答案 0 :(得分:2)
dotProduct
的正文包含dotProductAux
的定义,但没有实际的表达式。您需要实际拨打dotProductAux
(即您在dotProductAux list1 list2 0
之后错过了电话let rec
)。
此外,案例(显然您已经在编辑中修复了此问题。)| [],[]| l,[] -> accum
将导致错误,因为第二个模式绑定变量l
,而第一个模式不绑定变量l
。您可以通过将_
替换为{{1}}来解决此问题,因为您实际上并不需要它。