如何在OCaml / ReasonML中获取列表的一部分?

埃里克

例如,在Ruby中,您可以执行以下操作:

list = ["foo", "bar", "baz", "qux", "quux", "corge"]
result = list[2..4]

并且result将包含["baz", "qux", "quux"]

您将如何在OCaml / ReasonML中执行此操作?

ry

没有内置的切片列表功能,但可以轻松完成。由于我们有一个起点和一个终点,因此可以将问题分为两部分。第一部分是drop直到到达起点的几个元素,第二部分是take从起点到终点的几个元素。

let rec drop = (n, list) =>
  switch (list) {
  | [] => []
  | [_, ...xs] as z => n == 0 ? z : drop(n - 1, xs)
  };

let rec take = (n, list) =>
  switch (list) {
  | [] => []
  | [x, ...xs] => n == 0 ? [] : [x, ...take(n - 1, xs)]
  };

现在我们有了这两个功能,我们可以将它们组合起来以删除从起始点到起点的初始元素drop(i, list),然后传递此新列表以从起点到终点取元素

take(k - i + 1, drop(i, list));

总共

let slice = (list, i, k) => {

  let rec drop = (n, list) =>
    switch (list) {
    | [] => []
    | [_, ...xs] as z => n == 0 ? z : drop(n - 1, xs)
    };

  let rec take = (n, list) =>
    switch (list) {
    | [] => []
    | [x, ...xs] => n == 0 ? [] : [x, ...take(n - 1, xs)]
    };

  take(k - i + 1, drop(i, list));
};

更好的方法是先提供起点,然后再提供范围,而不是终点,因为在此我们不限制终点应大于起点

let slice = (list, start, range) => {

  let rec drop = (n, list) =>
    switch (list) {
    | [] => []
    | [_, ...xs] as z => n == 0 ? z : drop(n - 1, xs)
    };

  let rec take = (n, list) =>
    switch (list) {
    | [] => []
    | [x, ...xs] => n == 0 ? [] : [x, ...take(n - 1, xs)]
    };

  take(range, drop(start, list));
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在返回值中获取列表的一部分

PHP中的Regex:如何在最后一部分URL中获取单词?

如何在RDD中总结列表的一部分

如何在Recyclerview中仅刷新列表的一部分

如何在python列表中删除字符串的一部分?

如何在Nginx中获取$ host变量的一部分?

如何在JavaScript中获取字符串的最后一部分?

如何在jQuery中获取文本框ID的一部分

如何在opencv中获取矩阵的一部分

如何在BigQuery Standard SQL中获取数组的一部分?

如何在Ant设计中获取当前URL的最后一部分

如何在Haskell中获取数字的一部分

如何在赛普拉斯中获取url的一部分

如何在 Oracle 中获取 JSON 字符串的一部分

如何在C#中获取string []数组的一部分

如何在 JavaScript 中获取 var 的一部分?

如何遍历嵌套列表的一部分?

如何在 OCaml 中同时匹配一个模式和它的一部分?

如何在 OCaml 中输出一个空元组作为函数的一部分?

如何获取 URL 的一部分?

如何删除获取ID的一部分

如何获取当前的一部分URL?

如何从c#中的html代码中获取html代码的一部分?

如何从自身中减去列表的一部分?

如何仅提取列表中每个元素的一部分?

如何为列表中的每个项目移动字符串的一部分

如何计算在Python中作为列表一部分的集合的出现次数?

如何只处理 Python 中字典值列表的第一部分?

如何使用 javascript 从 url 中获取最后一部分?