我有一个清单
让derp = [1; 2; 3; 4; 5];
我是这种语言的初学者,这可能看起来很愚蠢,但如果我只想要中间值(3),我该如何归还?
答案 0 :(得分:2)
如果您不介意使用List模块,那么可以这样做:
List.nth derp (List.length derp / 2);;
答案 1 :(得分:0)
有很多方法可以做到这一点。你说,在你的评论中,这个列表中总会有5个元素。
首先,您可以使用Pavel解决方案:List.nth derp (List.length derp / 2);
。如果您想将其放在函数let middle list = List.nth list(List.length derp / 2);
第二种解决方案是使用模式匹配:
let middle list = match list with
| [] -> 0
| p :: q :: r :: s :: t -> r
请注意,在这里,我假设列表是Int
第三个是第一个解决方案的重写版本,但在这里我想你知道列表的长度:
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