OCaml:迭代列表并跳过错误构造函数的元素

Cas*_*ton 2 ocaml loops function pattern-matching

这似乎是一件奇怪的事情,你肯定会建议一个更好的方法来做到这一点.

这是我的目标:

我想滚动浏览传递给函数的列表的每个元素.如果它是构造函数Y,那么我想调用它上面的一些函数.如果它是构造函数Z,我想跳过它.

如果有一种方法可以在if语句中检查这个,那么这似乎是要走的路,因为我不需要编写其他的.但是,我只知道如何在比赛中检查这一点.

例如:

let myFunct list = 
List.iter (fun x -> match x with
           | Y y -> otherFunction y
          ) list;;
Run Code Online (Sandbox Code Playgroud)

现在,这给了我一个关于无法处理Z的警告.所以我可以在那里扔东西像......

let myFunct list = 
List.iter (fun x -> match x with
           | Y y -> otherFunction y
           | Z z -> (*skip*)
          ) list;;
Run Code Online (Sandbox Code Playgroud)

当然,我不能把Z的比赛留空......

我怎样才能完成我想要做的事情?

Lam*_*eek 6

只返回单位(即())的Z情况.

你确定要吗List.iter?它主要用于为其副作用应用函数.

功能程序中更惯用的方法是使用过滤列表List.filter,然后使用转换应用于所有剩余元素List.map.

  • `List.filter_map`用于救援 (4认同)
  • 我不同意首先应用`List.filter`创建一个中间列表,在应用`List.map`之前立即丢弃它是一种好的风格. (2认同)