我是 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/