Как я могу изменить свой код, чтобы при разрезании списка последний элемент был эксклюзивным? - PullRequest
0 голосов
/ 04 мая 2019

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

1 Ответ

1 голос
/ 04 мая 2019

Поскольку ваш второй индекс является эксклюзивным, похоже, что вы хотите остановить рекурсию, когда i> = j, а не когда i> j.

...