在给定的一天之前n天返回一天的功能

时间:2013-03-11 21:26:11

标签: function recursion functional-programming ocaml

所以我想构建一个函数,它接受一天和一天(我下面的日期类型)并返回指定日期前n天的日期。

我将类型日定义为

type day = Sun | Mon | Tues | Wed | Thurs | Fri | Sat;;

和第二天返回的函数:

let next (d:day) : day =
    match d with
  Mon -> Tues;
 | Tues -> Wed;
 | Wed -> Thurs;
 | Thurs -> Fri;
 | Fri -> Sat;
 | Sat -> Sun;
 | Sun -> Mon;
;; 

我正在寻找如上所述构建一个函数,我认为它需要对下一个进行递归调用以保持递增一天,直到它提前n天,但我完全不知道如何在OCaml中定义它。我试图定义一些东西但到目前为止只创建了一个与下一个相同的功能,例如:

let rec ndays (n:int) (d:day) : day =
  if n=0 then next d else ndays (pred n) d;;

我觉得这很接近,但众所周知,关闭仅限于马蹄铁和手榴弹。有没有人有关于我如何进行的任何提示?

1 个答案:

答案 0 :(得分:4)

首先,代码中的f7是什么。事实上,fn符号应该是什么意思?

如果我理解你正确,你正在寻找这样的功能:

let rec next_n d = function
  | 0 -> d
  | n -> next_n (next d) (pred n)
# next_n : day -> int -> day