Проблема с типом выражения OCaml - PullRequest
4 голосов
/ 30 сентября 2011

Я пытаюсь создать функцию OCaml, которая добавляет число символов «a» в строке к заданному аргументу.

let rec count_l_in_word (initial : int) (word : string) : int=
    if String.length word = 0 then initial else
    if word.[0] = 'a' then 
        count_l_in_word initial+1 (Str.string_after word 1)
    else count_l_in_word initial (Str.string_after word 1)

Я получаю сообщение об ошибке в строке 4, говорящее «Это выражение имеет тип string -> int, но здесь используется с типом int». Я не уверен, почему он ожидает, что выражение 'count_l_in_word initial + 1' будет int. Следует ожидать, что целая строка 'count_l_in_word initial + 1 (Str.string_after word 1)' будет int.

Может ли кто-нибудь помочь с этим

1 Ответ

4 голосов
/ 30 сентября 2011
count_l_in_word initial+1 (Str.string_after word 1)

анализируется как

(count_l_in_word initial) + (1 ((Str.string_after word) 1))

, поэтому вам нужно добавить несколько символов:

count_l_in_word (initial + 1) (Str.string_after word 1)
...