2011-09-30 70 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