代码之家  ›  专栏  ›  技术社区  ›  nejifnjalz

OCaml语法错误-有趣的模式匹配

  •  -2
  • nejifnjalz  · 技术社区  · 6 年前

    这是我的代码:

    let rec mul = fun 
    |a b when a mod 2 = 0 -> mul (a/2) (2*b)
    |a b when a mod 2 = 1 -> mul ((a-1)/2) (2*b)+b;;
    

    它告诉我第二行的语法错误。 我必须说,我不明白为什么,我只是在做一个简单的双参数模式匹配。。。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Jeffrey Scofield    6 年前

    这个 fun 关键字采用一系列模式,每个模式表示一个参数。所以,任意数量的参数,每个都有一个模式。

    这个 function 关键字采用一系列由“|”分隔的模式,表示单个参数的备选方案。所以,一个参数可以有任意数量的模式。

    你还有别的东西,两者的混合体。请注意,没有像“a b”这样的单一模式。它与 享乐 因为a和b是分开的模式。

    您可以这样编写函数:

    let rec mul = fun a b ->
        if a mod 2 = 0 then mul (a/2) (2*b)
        else mul ((a-1)/2) (2*b)+b
    

    (但很可能您知道这一点,只是对模式匹配方面感兴趣。)