在OCaml中使用fold_left时出错

时间:2015-03-21 12:45:08

标签: functional-programming ocaml

我试图将列表中的整数转换为相应的ASCII值,然后将它们连接起来形成一个字符串。这就是我试过的:

# let l = [65;66;67];;
# List.fold_left (fun x y ->  char_of_int x ^ char_of_int y) "" l;; 

我收到以下错误:

Error: This expression has type char but an expression was expected of type
         string

char_of_int x标记为错误。

1 个答案:

答案 0 :(得分:2)

发生错误,因为OCaml运算符^只接受两个字符串,它不能直接连接两个字符。为了构建字符串,首先必须将单个字符转换为字符串(长度为1)。然后你可以连接这些短字符串。

# let chars = List.map char_of_int l;;
val chars : char list = ['A'; 'B'; 'C']
# let strings = List.map (String.make 1) chars;;
val strings : string list = ["A"; "B"; "C"]
# String.concat "" strings;;
- : string = "ABC"