如何使用带有多个参数的List.fold_left ocaml?

时间:2014-11-16 01:10:40

标签: functional-programming ocaml

所以我有一个像这样的功能

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会在这里有用吗?

1 个答案:

答案 0 :(得分:0)

出于这个特殊目的,如果factorstest的第一个参数,情况会更好。我们称这个函数为fliptest

let fliptest a b = test b a

那么你的函数就像这样(在我看来):

let process factors list =
    List.concat (List.map (fliptest factors) list)

(如果这不太对,那可能很接近。)