Invalid_argument“ String.sub / Bytes.sub”

时间:2019-02-09 18:15:56

标签: recursion types ocaml recurrence

我在做运动时有一个小问题。 我尝试递归计算字符串中的元音,但弹出此奇怪错误。 有人可以解释我为什么吗?

  let rec nb_voyelle = function chaine ->
                           if chaine == "" then
                             0
                           else
                             let length = (String.length chaine)-1 in
                             let p_length = String.sub chaine 0 length in
                             match chaine.[length] with
                             | 'a' | 'e' | 'i' | 'o' | 'u' | 'y' -> 1 + nb_voyelle p_length
                             | _ -> 0 + nb_voyelle p_length

    ;;

1 个答案:

答案 0 :(得分:2)

答案是我用“ ==”来比较我的最终情况下的字符串,这不是测试两个元素之间相等性的好方法。

同样地,发生了情况(String.sub“” 0 -1),并且函数未能引发此错误。