我刚刚开始OCaml(和函数式编程),我试着编写一个函数来计算数组(tab)中出现“value”的次数。 我想:OCaml在过滤器上的语法错误
let rec count_occ tab value =
let rec count_rec idx time = function
| tab.length - 1 -> time
| _ when tab.(indice) == value-> count_rec (idx + 1) (time + 1)
| _ -> count_rec (indice + 1) time
in
count_rec 0 0
;;
不幸的是,它不会因为语法错误的编译,我没有找到解决办法。
谢谢,我在正确的道路,现在,我的代码来看:http://pastie.org/8746861但它并没有真正的工作 – Epitouille
当你使用|匹配idx时您正在创建'idx'到'n'的新绑定,而不是测试'n'的内容是否等于'idx'。相反,这是在警卫中完成的。匹配是结构性的,如分解列表和元组并匹配变体和常量。 – nlucaroni
一旦你解决了这个问题,你应该立即注意到在这种情况下匹配不合适 - 在这三种情况下你都会与'_'匹配。改用if语句。 – nlucaroni