list - 奥卡姆。返回列表的前 n 个元素

标签 list functional-programming nested ocaml element

我是 OCaml 和整个函数式编程的新手。我正在做作业的一部分,我必须简单地返回列表的前 n 个元素。我不允许使用 List.Length。

我觉得我所写的内容对于我想要完成的任务来说可能过于复杂。我的代码尝试做的是将列表的前面连接到末尾,直到 n 递减到 1。此时头部将进一步移动 n-1 个位置到列表的尾部,然后返回尾部。再次,我意识到可能有一种更简单的方法来做到这一点,但我被难住了,可能表明我无法掌握函数式编程。

   let rec take n l =
        let stopNum = 0 - (n - 1) in
        let rec subList n lst =
        match lst with
        | hd::tl -> if n = stopNum then (tl)
                        else if (0 - n) = 0 then (subList (n - 1 ) tl )
                        else subList (n - 1) (tl @ [hd])
        | [] -> [] ;;

我的编译器告诉我最后一行有语法错误。无论“| [] -> []”是最后一行还是上面一行,我都会得到相同的结果。当我取出嵌套的subList let 时,语法错误不存在。显然,关于嵌套让有些东西我只是不理解。

谢谢。

最佳答案

let rec firstk k xs = match xs with
| [] -> failwith "firstk"
| x::xs -> if k=1 then [x] else x::firstk (k-1) xs;;

您可能一直在寻找这个。

关于list - 奥卡姆。返回列表的前 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26543669/

相关文章:

r - 仅选择包含 R 中两列表的列表的元素

javascript - async/await 在函数式编程 JavaScript 中没有位置吗

python - 无法使用唯一的第一个键确定性地更新嵌套字典

java - 如何在 Java 中匹配括号内的字符串(嵌套)?

arrays - 如何在 $lookup 之后反转 $unwind 或重新组装?

python - 如何查找给定范围内有多少个数字

python - 使用 Python 从文本文件中获取某些单词和短语

html - 如果没有 display "list-item"CSS display "list"有什么用?

python - 如何更新纯函数?

ios - Swift,使用函数 UIView.removeFromSuperview 作为 forEach 函数中 View 数组的参数