我对 Ocaml 还很陌生,我正在执行一项任务,我想将字符串列表转换为字符串( string list -> string = ),其中它通过在之间添加空格来连接元素。另外,如果它是前导元素,它还会添加“”并忽略空字符串。
到目前为止我的代码:
let rec join list = function
| [] -> ""
| [e1] -> e1
| ""::e2 -> join list e2
| e1::e2 -> e1 ^ list ^ join list e2 ;;
不确定它是否正确,但是我什至无法测试它,因为我不知道如何修复错误并更改参数,因为它说预计会使用字符串而不是字符串列表调用函数。
还有关于如何仅在第一个前导元素上添加“”的任何其他提示吗?
问题是
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 " "