String OCaml:需要List.map函数的帮助吗

String OCaml:需要List.map函数的帮助吗,string,list,ocaml,String,List,Ocaml,我需要创建一个基本上如下工作的函数: insert_char("string" 'x') outputs "sxtxrxixnxg". 因此,我的理由如下: 创建包含字符串中每个字符的列表: let inserer_car(s, c) = let l = ref [] in for i = 0 to string.length(s) - 1 do l := s.[i] :: !l done; 然后,我想使用List.map将其转换为类似['s',x',t',x'等]的列表 然

我需要创建一个基本上如下工作的函数:

insert_char("string" 'x') outputs "sxtxrxixnxg".
因此,我的理由如下:

创建包含字符串中每个字符的列表:

let inserer_car(s, c) = 
    let l = ref [] in
for i = 0 to string.length(s) - 1 do
   l := s.[i] :: !l
done;
然后,我想使用
List.map
将其转换为类似
['s',x',t',x'等]
的列表

然而,我真的不知道如何创建与map一起使用的函数。任何帮助都将不胜感激


我是编程的初学者,尤其是ocaml!因此,请随意假设我完全无知。

映射函数创建具有不同内容的结构副本。对于列表,这意味着
List.map f List
的长度与
List
的长度相同。所以,这对你不起作用。你的问题需要充分的解决

(您也可以强制解决这个问题,但在我看来,学习OCaml的原因是学习函数式编程。)

假设您要使用
List.fold\u left
。然后该调用看起来如下所示:

let result = List.fold_left myfun [] !l
open Core.Std

let insert_char s c =
  String.to_list s
  |> (fun l -> List.intersperse l c)
  |> String.of_char_list
函数
myfun
的类型为
char list->char->char list
。本质上,它的第一个参数是迄今为止构建的结果,第二个参数是输入列表的下一个字符
!l
。结果应该是当您将新字符添加到目前为止的列表中时得到的结果


最后,您需要将字符列表转换回字符串。

如果使用Core,您可以这样编写:

let result = List.fold_left myfun [] !l
open Core.Std

let insert_char s c =
  String.to_list s
  |> (fun l -> List.intersperse l c)
  |> String.of_char_list
或者,相当于:

let insert_char s c =
  let chars = String.to_list s in
  let interspersed_chars = List.intersperse chars c in
  String.of_char_list interspersed_chars

这只是对现有图书馆的直接使用。如果您想要实现
List.intersprise
,您可以找到它。非常简单。

谢谢,你能给我一个正确的myfun函数的基本示例吗?我不太清楚语法。一个接受两个参数的函数:
让f A b=b::A