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

时间:2018-03-26 18:20:34

标签: ocaml

这是我的代码:

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;;

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

1 个答案:

答案 0 :(得分:2)

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

function关键字采用由“|”分隔的一系列模式,表示单个参数的替代项。所以,一个论点有任意数量的模式。

你还有别的东西,两者的混合物。请注意,没有像“a b”这样的单一模式。它适用于fun,因为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

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