functional-programming - OCaml 表达式类型问题

标签 functional-programming ocaml currying

我正在尝试创建一个 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)' 是一个整数。

有人能帮忙吗

最佳答案

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)

关于functional-programming - OCaml 表达式类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611064/

相关文章:

python - 如何在给定参数位置柯里化(Currying)函数

scala - 使用 Scala 中的方法丰富 ADT 的类型类模式替代方案

functional-programming - F# 中泛型类型的泛型函数

user-interface - 函数式 GUI 编程可能吗?

asynchronous - 简单 UDP 服务器 OCaml/Async

ocaml 类对象

scala - 为什么命令式语言没有模式匹配?

functional-programming - 什么是绑定(bind)事件?

javascript - 如何协调 Javascript 与柯里化(Currying)和函数组合

Scala:如果类构造函数不起作用的默认值