Ocaml 将字符串列表转换为字符串

Ocaml convert string list to string

我是 Ocaml 的新手,我正在执行一项任务,我想将字符串列表转换为字符串 ( string list -> string = ),它通过在两者之间添加 space 来连接元素.此外,如果它是前导元素,它还会添加“”并忽略空字符串。

到目前为止我的代码:

let rec join list = function 
  | [] -> ""
  | [e1] -> e1
  | ""::e2 -> join list e2
  | e1::e2 -> e1 ^ list ^ join list e2 ;;

不确定它是否正确,但是我什至无法测试它,因为我不知道如何修复错误和更改参数,因为它说它应该用字符串调用函数,而不是字符串列表。

还有关于如何仅在第一个前导元素上添加“”的其他提示吗?

你可以直接使用 String.concat:

String.concat " " ["foo"; "bar"; "baz"]
- : string = "foo bar baz"

问题是 join 的类型是 string -> string list -> string,而不是 string list -> string,因为 function 创建了一个函数,它不匹配。你要的是

let rec join = function
  | [] -> ""
  | ""::tail -> join tail
  | hd::tail -> hd ^ join tail

请注意,您的基本情况 [e1] -> e1 是无用的,因为它也是 e1::[],它被转换为 e1 ^ join [],进而变成 e1 ^ "",即 e1.

此外,您可以使用 String.concat 来做到这一点,但是如果您有一个空字符串,您不想添加 space,因此您必须先添加 filter

let join l =
  List.filter (fun s -> s <> "") l
  |> String.concat ""