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

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

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

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

请不要给我答案,只是为新学习者指出正确的方向。

list functional-programming ocaml
2个回答
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
随时构建结果。或者你可以编写自己的递归函数。

如果您还没有编写太多递归函数,那么这将是需要考虑的事情。


0
投票

以防万一有人需要答案:

let append_all xs ys =
  let helper e =
    List.map (fun x -> x^e) xs in
  List.(concat (map helper ys))
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.