OCaml - 将列表的所有元素附加到另一个列表的所有元素

时间:2017-05-03 23:31:40

标签: list functional-programming ocaml

给出字符串列表[a,b,c]和[d,e],例如,

返回列表[ad,bd,cd,ae,be,ce]。

请不要给我一个答案,只是为新学员指明正确的方向。

1 个答案:

答案 0 :(得分:2)

这个问题很棘手,因为你需要遍历两个列表。如果将其作为一个函数编写,则有两个递归来跟踪。

接近它的一种方法是从一个更简单的问题开始。假设您有一个字符串列表l和一个字符串s。您是否可以编写一个函数,在s的每个字符串后附加l的新列表?

使用List.map可以直接解决这个更简单的问题。或者你可以编写一个显式递归函数。

之后你只剩下一个剩余的递归来判断,这可能更容易。

<强>更新

现在你有了自己的功能,你可以轻松地编写一个函数,将一个字符串附加到第一个字符串列表的所有元素。布局如下所示:

let cross_concat list1 list2 =
   let concat_string_to_list1 s = concat_string_to_list list1 s in
   ...

使用此定义,您可以再次使用List.map来获取最终结果(需要将生成的字符串列表连接到一个列表中)。或者,您可以使用List.fold_right来构建结果。或者你可以编写自己的递归函数。

如果您没有编写过多的递归函数,那么可以考虑一下。