【问题标题】:How can I change my code so that when I slice a list, the last element is exclusive?如何更改我的代码,以便在对列表进行切片时,最后一个元素是独占的?
【发布时间】: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);;

【问题讨论】:

    标签: recursion ocaml slice


    【解决方案1】:

    由于您的第二个索引是独占的,因此您似乎想在 i >= j 时停止递归,而不是在 i > j 时停止递归。

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 2014-04-27
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      相关资源
      最近更新 更多