【问题标题】:How to use List.fold_left ocaml with multiple arguments?如何使用具有多个参数的 List.fold_left ocaml?
【发布时间】:2015-01-13 04:26:33
【问题描述】:

所以我有这样的功能

let test (item: 'a ) (factors: items) : ('b list) =
  ....

这个函数接受一些 'a 元素的项目和我自己的项目类型,这是我传递给它的另一个项目列表。在做了一些事情后我返回了一个不同类型的列表

如何将 List.fold_left 与此函数一起使用,以便如果我有一个项目列表,我可以单独对每个项目应用测试,并将“因素”传递给所有项目,然后我可以为每一个连接生成的 'b 类型列表。

例如,我需要处理以下列表:

[somea; someb; somec]
as 
(test somea factors)@(test someb factors)@(test somec factors)

这是 List.fold_left 不适用的任务吗?我可以使用其他功能吗?由于我的代码中的其他方法存在一些相互递归的问题,我无法递归遍历和调用该函数,那么还有另一种方法吗? List.map 在这里有用吗?

【问题讨论】:

    标签: functional-programming ocaml


    【解决方案1】:

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

    let fliptest a b = test b a
    

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

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

    (如果这不完全正确,它可能很接近。)

    【讨论】:

    • 哈哈,这实际上是我最终做的:P。我想我一开始只是想把一个方形钉钉在一个圆孔里。不过谢谢!
    猜你喜欢
    • 2012-12-31
    • 2012-09-29
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多