Неверный аргумент "String.sub / Bytes.sub"

У меня есть небольшая проблема с упражнением, которое я делаю. Я пытаюсь рекурсивно считать гласные в строке, но у меня появляется эта странная ошибка. Может кто-нибудь объяснить мне, почему?

  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 ответ

Решение

Ответ - я использовал "==" для сравнения строки в моем последнем случае, что не очень хорошо подходит для проверки равенства между двумя элементами.

Таким образом, происходит случай (String.sub "" 0 -1), и функция не может вызвать эту ошибку.

Другие вопросы по тегам