我有一个清单
让 derp = [1; 2;3;4;5];;
我是这种语言的初学者,这可能看起来很愚蠢,但如果我只想要中间值(3),我将如何返回它?
如果您不介意使用List模块,那么可以这样完成:
List.nth derp (List.length derp / 2);;
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
有很多方法可以做到这一点。你说,在你的评论中,这个列表中总会有 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)