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 ""
我是 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 ""