使用条件语句迭代ocaml列表

时间:2012-03-09 23:40:40

标签: list map iteration ocaml

ocaml的新手,所以我可以带来的是伪造的。

我想编写一个接受列表的函数,然后返回一个只有奇数整数的新列表。

因此,只需遍历列表,可能使用%2来查找奇数整数,并将它们附加到新列表中。

是ocaml的新手,我查看了什么可能有用,例如 map,rev-map或iter,甚至可能是过滤器?

最好使用什么,以及如何设置?

1 个答案:

答案 0 :(得分:5)

List module中最合适的功能是filter。看看它的签名和描述:

val filter : ('a -> bool) -> 'a list -> 'a list
  

filter p l返回满足该列表的列表l的所有元素   谓词p。保留输入列表中元素的顺序。

你应该知道如何提供用于检查奇数整数的谓词,如你的问题中清楚描述的那样。

另一个不太优雅的解决方案是:

  • 只需遍历列表,并使用累加器列表来收集结果。
  • 如果元素是奇数,则将其添加到累加器。
  • 反转累加器以获得正确的顺序。

此解决方案包含List.fold_left用于累积结果,List.rev用于反转列表。

由于您只询问哪些功能合适,希望您能够自己使用它们。

修改

由于您在List.filter上分享了您的尝试,因此以下是一种使用方法:

let odds xs = List.filter (fun x -> x mod 2 <> 0) xs

为了能够进一步使用OCaml,请花一些时间阅读OCaml教程。 OCaml tag wiki有很多很好的资源可供开始使用。