这是我的代码:
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行的语法错误。 我必须说我不明白为什么,我只是做一个简单的双参数模式匹配...
答案 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
(但很可能你知道这一点,只对模式匹配方面感兴趣。)