我正在尝试在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);;
答案 0 :(得分:1)
由于第二个索引是互斥的,因此您似乎想在i> = j而不是i> j时停止递归。