Function 函数返回给定日期前n天的日期
因此,我希望构建一个函数,该函数接受int和下面我的day类型的day,并返回给定日期前n天的日期 我将日期类型定义为Function 函数返回给定日期前n天的日期,function,recursion,functional-programming,ocaml,Function,Recursion,Functional Programming,Ocaml,因此,我希望构建一个函数,该函数接受int和下面我的day类型的day,并返回给定日期前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;
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;
;;
我希望构建一个如上所述的函数,我认为它需要对next进行递归调用,以不断增加一天,直到它提前n天,但我完全不知道如何在OCaml中定义它。我尝试过定义一些东西,但到目前为止,只创建了一个函数,该函数执行与next相同的操作,例如:
let rec ndays (n:int) (d:day) : day =
if n=0 then next d else ndays (pred n) d;;
我觉得这很接近,但我们都知道,接近只算作马蹄铁和手榴弹。有人知道我如何继续吗?首先,代码中的f7是什么。事实上,fn符号应该是什么意思 如果我理解正确,您正在寻找这样的函数:
let rec next_n d = function
| 0 -> d
| n -> next_n (next d) (pred n)
# next_n : day -> int -> day
首先,代码中的f7是什么。事实上,fn符号应该是什么意思 如果我理解正确,您正在寻找这样的函数:
let rec next_n d = function
| 0 -> d
| n -> next_n (next d) (pred n)
# next_n : day -> int -> day
哦,对不起,我更改了一份副本的名称,但没有更改另一份,让我编辑!这个条表示d可以是不同的东西,对吗?我们可以修改它,使初始函数接受一个int和一天吗?比如让next\n:int d:day:day=…是的,你可以。函数只是一个简单的语法,用于在我们的示例中获取参数n:int并立即对其进行模式匹配。您可以将我的示例改写为:让rec next\n d n=match n with。。。这将是同等的。还请注意,类型注释不是必需的。OCaml会推断出来的。啊,好吧,这是我比较熟悉的风格。非常感谢。你会经常看到这两种样式,所以熟悉这两种样式还是不错的。哦,对不起,我更改了一个副本的名称,但没有更改另一个,让我编辑!这个条表示d可以是不同的东西,对吗?我们可以修改它,使初始函数接受一个int和一天吗?比如让next\n:int d:day:day=…是的,你可以。函数只是一个简单的语法,用于在我们的示例中获取参数n:int并立即对其进行模式匹配。您可以将我的示例改写为:让rec next\n d n=match n with。。。这将是同等的。还请注意,类型注释不是必需的。OCaml会推断出来的。啊,好吧,这是我比较熟悉的风格。非常感谢。你会经常看到这两种风格,所以熟悉这两种风格还是不错的。