似乎无法找到这段代码有什么问题...... F#

时间:2011-01-03 00:32:30

标签: list f#

我到处检查过,我似乎无法找到问题所在。编译器给我这个错误:“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#的新手,似乎无法正确使用此代码。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

dotProduct的正文包含dotProductAux的定义,但没有实际的表达式。您需要实际拨打dotProductAux(即您在dotProductAux list1 list2 0之后错过了电话let rec)。

此外,案例| [],[]| l,[] -> accum将导致错误,因为第二个模式绑定变量l,而第一个模式不绑定变量l。您可以通过将_替换为{{1}}来解决此问题,因为您实际上并不需要它。(显然您已经在编辑中修复了此问题。)