Я пытаюсь создать функцию среза в 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);;