从OCaml中的列表返回中间值

时间:2013-10-16 13:06:14

标签: list recursion ocaml

我有一个清单

  

让derp = [1; 2; 3; 4; 5];

我是这种语言的初学者,这可能看起来很愚蠢,但如果我只想要中间值(3),我该如何归还?

3 个答案:

答案 0 :(得分:2)

如果您不介意使用List模块,那么可以这样做:

List.nth derp (List.length derp / 2);;

答案 1 :(得分:0)

有很多方法可以做到这一点。你说,在你的评论中,这个列表中总会有5个元素。

  1. 首先,您可以使用Pavel解决方案:List.nth derp (List.length derp / 2);。如果您想将其放在函数let middle list = List.nth list(List.length derp / 2);

  2. 第二种解决方案是使用模式匹配:

    let middle list = match list with | [] -> 0 | p :: q :: r :: s :: t -> r

    请注意,在这里,我假设列表是Int

  3. 的列表
  4. 第三个是第一个解决方案的重写版本,但在这里我想你知道列表的长度:

    let rec middle list n = if(n == 0) if(list.isEmpty) failwith "Empty List" else list.head else middle list (n - 1)

答案 2 :(得分:0)

exception Error

let rec middle = function
    []    -> raise Error
  | [x]   -> x
  | x::tl -> middle (List.tl (List.rev tl))

测试:

# middle [1];;
- : int = 1
# middle [1;2];;
Exception: Error.
# middle [1;2;3];;
- : int = 2
# middle [1;2;3;4;5];;
- : int = 3