所以我有一个像这样的功能
let test (item: 'a ) (factors: items) : ('b list) =
....
此函数接收一些'元素和我自己的项类型的项,这是我传递给它的另一个项目列表。在做完一些事后我会返回一个不同类型的列表
如何将List.fold_left与此功能一起使用,以便如果我有一个项目列表,我可以单独对每个项目应用测试,并将'因素'传递给所有这些项目,然后让我可以连接每个结果的'b类型列表。
例如,我需要处理以下列表:
[somea; someb; somec]
as
(test somea factors)@(test someb factors)@(test somec factors)
这是List.fold_left不适用的任务吗?我可以使用其他功能吗?我不能递归遍历并调用函数,因为我的代码中的其他方法会出现一些相互递归的问题,那么还有另外一种方法吗? List.map会在这里有用吗?
答案 0 :(得分:0)
出于这个特殊目的,如果factors
是test
的第一个参数,情况会更好。我们称这个函数为fliptest
:
let fliptest a b = test b a
那么你的函数就像这样(在我看来):
let process factors list =
List.concat (List.map (fliptest factors) list)
(如果这不太对,那可能很接近。)