我正在尝试创建这个带有int x
和列表的递归函数,然后从列表中删除第一个x
个元素:
let rec nthcdr int_t list_t =
match int_t with
| 0 -> list_t
| _ -> (match list_t with
| [] -> []
| h::tail -> nthcdr (int_t -1) tail)
;;
但它不起作用,h::tail
似乎从不匹配,并且它始终返回[]
答案 0 :(得分:1)
我想提供改进代码作为答案(因为OP已经找到了解决方案)。
模式匹配整数int_t
感觉多余。当然,您可以这样做,但是当与代数数据类型(如记录或变体或类似列表的集合)一起使用时,模式匹配的好处变得明显。此外,对整数使用if..else
可使代码更清晰,并将基本案例与归纳案例区分开来。
let rec drop n li =
if n = 0 then li else
match li with
| [] -> []
| h::t -> drop (n-1) t