【发布时间】:2019-05-04 00:06:37
【问题描述】:
我正在尝试在 OCAML 中创建一个切片功能,它可以满足我的要求,只是它不排除列表中的最后一个元素。我知道为什么会这样,但我不确定如何更改我的代码以使其不包含最后一个元素。
slice ["a";"b";"c";"d";"e";"f";"g";"h"] 2 6;;
这是我正在测试的代码,我可以在我的代码中看到,这基本上是步骤的执行方式。
slice ["a";"b";"c";"d";"e";"f";"g";"h"] 2 6
slice ["b";"c";"d";"e";"f";"g";"h"] 1 5
slice ["c";"d";"e";"f";"g";"h"] 0 4
因为现在 i = 0,所以函数完成了。但我不知道如何从右边切。我希望输出是
["c"; "d"; "e"; "f"]
这是我正在使用的代码。
let rec slice lst i j = match lst with
| [] -> []
| h :: t -> if (j > List.length lst) then slice lst i (List.length lst)
else if i > j then []
else if i = 0 then h :: (slice t 0 (j - 1))
else slice t (i - 1) (j - 1);;
【问题讨论】: