如何在OCaml中将char列表转换为字符串?

Adi*_*wal 5 ocaml list char

我有一个char列表 ['a';'b';'c']

如何将其转换为字符串"abc"?

谢谢x

ivg*_*ivg 8

您可以创建一个长度等于列表长度的字符串,然后使用计数器折叠列表,并使用列表的内容初始化字符串...但是,从OCaml 4.02开始,字符串类型已启动要转向不变性的方向(并在4.06中变为不可变),你应该开始将字符串视为不可变的数据结构.那么,让我们尝试另一种解决方案.有一个Buffer专门用于字符串构建的模块:

# let buf = Buffer.create 16;;
val buf : Buffer.t = <abstr>
# List.iter (Buffer.add_char buf) ['a'; 'b'; 'c'];;
- : unit = ()
# Buffer.contents buf;;
- : string = "abc"
Run Code Online (Sandbox Code Playgroud)

或者,作为一个功能:

let string_of_chars chars = 
  let buf = Buffer.create 16 in
  List.iter (Buffer.add_char buf) chars;
  Buffer.contents buf
Run Code Online (Sandbox Code Playgroud)


Pat*_*atJ 6

从 OCaml 4.07 开始,您可以使用序列轻松做到这一点。

let l = ['a';'b';'c'] in
let s = String.of_seq (List.to_seq l) in
assert ( s = "abc" )
Run Code Online (Sandbox Code Playgroud)


Jef*_*eld 5

let cl2s cl = String.concat "" (List.map (String.make 1) cl)
Run Code Online (Sandbox Code Playgroud)

  • 如果列表太长,此解决方案将产生堆栈溢出。在这种情况下,请使用ivg解决方案。顺便说一句,电池中包含一个“ String.of_list”。 (2认同)