例如,给定字符串列表 [a, b, c] 和 [d, e],
返回列表 [ad, bd, cd, ae, be, ce]。
请不要给我答案,只是为新学习者指出正确的方向。
这个问题很棘手,因为你需要遍历两个列表。如果您将其编写为一个函数,则需要跟踪两个递归。
解决这个问题的一种方法是从一个更简单的问题开始。假设您有一个字符串列表
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
随时构建结果。或者你可以编写自己的递归函数。
如果您还没有编写太多递归函数,那么这将是需要考虑的事情。
以防万一有人需要答案:
let append_all xs ys =
let helper e =
List.map (fun x -> x^e) xs in
List.(concat (map helper ys))