【发布时间】:2014-12-20 00:58:40
【问题描述】:
我是 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 时不存在语法错误。显然,我只是不理解关于嵌套让的一些东西。
谢谢。
【问题讨论】:
标签: list functional-programming nested ocaml elements