1

我有一个清单

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

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

4

3 回答 3

2

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

List.nth derp (List.length derp / 2);;
于 2013-10-16T13:13:01.137 回答
1
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
于 2015-10-14T22:56:15.840 回答
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. 第三个是第一个解决方案的重写版本,但在这里我想你知道列表的长度:

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

于 2013-10-16T13:31:12.797 回答