列出在OCaml中列出的选项

时间:2014-04-03 18:21:43

标签: functional-programming ocaml

我有一个返回(char list)列表选项的函数,我正在尝试获取列表的大小:

let c = recherche m ledico in
  match c with
    | None -> Printf.printf "Non."
    | Some [] -> Printf.printf "Oui."
    | _ ->
      let n = List.length c in
(...)

recherche是向我返回(char list) list option的函数,它可以返回NoneSome []Some [[...] ; ... ; [...]]。我怎么找到这个长度?我看到this解决方案,但它不起作用:

Error: The function applied to this argument has type 'a list -> 'a list
This argument cannot be applied with label ~f

如何获得列表选项的大小?

2 个答案:

答案 0 :(得分:3)

您只需要为列表命名即可。

| Some l -> let n = List.length l in ...

答案 1 :(得分:0)

要将函数应用于'a option,您只需要一个适用于'a类型值的函数,以及一个在输入为None时返回的值。 Core库中有一个名为value_map的函数可以执行此操作。基本实现非常简单:

let value_map x default f =
    match x with
    | None -> default
    | Some sx -> f sx

在您的情况下,您需要选择默认值。您要应用的功能是List.length