[英]List filter then List map in OCaml
如何在OCaml中的列表映射之前应用列表过滤器? 我正在尝试管道操作器,但没有成功:
let r infile =
match List.tl (In_channel.read_lines infile ) with
| None -> []
| Some body ->
List.filter body ~f:(fun line -> true)
|> List.map body ~f:(fun line ->
match split_on_comma line with
| _ :: _ :: num :: street :: unit :: city :: _ :: region :: _ ->
String.strip (num ^ " " ^ addr_case street ^ ", " ^ addr_case city ^ " " ^ region)
| _ -> assert false)
优拓给我:
“此表达式具有类型字符串列表,但是期望为类型字符串列表->'a”的表达式
我知道List.filter目前不执行任何操作。 我只是想在List.map之前使用它
标准的OCaml List.filter没有〜f ~f:
参数。 您很有可能正在使用Core。
我目前尚未设置Core,因此无法测试。 但是一个可能的问题是您在List.map
调用中使用body
。 我认为您应该忽略它。 您要处理List.filter
表达式的结果。 您不想处理正文,它是匹配中的原始值。
这是使用OCaml标准库版本的函数的类似表达式:
# ListLabels.filter [1; 2; 3; 4]
~f: (fun x -> x mod 2 = 0) |>
ListLabels.map ~f: (fun x -> x + 10) ;;
- : int list = [12; 14]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.