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

问题描述 投票:0回答:2

我对 Ocaml 还很陌生,我正在执行一项任务,我想将字符串列表转换为字符串( string list -> string = ),其中它通过在之间添加空格来连接元素。另外,如果它是前导元素,它还会添加“”并忽略空字符串。

到目前为止我的代码:

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

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

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

string list ocaml
2个回答
4
投票

你可以使用

String.concat
:

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

3
投票

问题是

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
来完成此操作,但由于您不想在有空字符串时添加空格,因此必须先
filter

let join l =
  List.filter (fun s -> s <> "") l
  |> String.concat " "
© www.soinside.com 2019 - 2024. All rights reserved.