2011-09-30 55 views
4

我想做一個OCaml函數,它將一個字符串中'a的數目加到給定的參數中。OCaml表達式類型問題

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。

任何人都可以用這個

回答

4
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) 
+0

謝謝,我想我必須要小心優先。我知道它的工作原理 – Chris

+2

規則IIRC是函數應用比任何運算符都具有更高的優先級。這在FP語言中很常見。 –

+1

不會被解析爲'(count_l_in_word initial)+(1((Str.string_after word)1))'? – newacct