Caml / Ocaml:模式匹配多个参数函数

时间:2017-09-24 03:07:53

标签: pattern-matching ocaml caml-light

我正在尝试创建这个带有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似乎从不匹配,并且它始终返回[]

1 个答案:

答案 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