1

そのため、int と 1 日 (以下の私の日型) を取り、指定された日の 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 日先になるまで日を増やし続けるには、next を再帰的に呼び出す必要があると考えていますが、OCaml でこれを定義する方法に完全に困惑しています. 私はいくつかのことを定義しようとしましたが、これまでのところ、次のような同じことを行う関数しか作成していません:

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

これは近い気がしますが、私たち全員が知っているように、馬蹄形と手榴弾でのみ閉じることがカウントされます. どうすれば進められるかについてのヒントはありますか?

4

1 に答える 1

4

まず、コード内の f7 は何ですか。実際、fn表記は何を意味するのでしょうか?

私があなたを正しく理解していれば、あなたは次のような関数を探しています:

let rec next_n d = function
  | 0 -> d
  | n -> next_n (next d) (pred n)
# next_n : day -> int -> day 
于 2013-03-11T21:40:13.970 に答える