2013-03-11 2 views
1

그래서 int와 하루 (아래에 하루 종일)의 함수를 구현하고 주어진 날보다 n 일 앞의 날짜를 반환하는 함수를 만들려고합니다.주어진 날로부터 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;; 

이 가까이 있지만 우리 모두가 알다시피, 가까운에서만 계산 말굽과 수류탄. 누구든지 내가 어떻게 진행할 수 있는지에 대한 조언이 있습니까?

답변

4

우선, 코드에서 f7은 무엇입니까? 사실 fn 표기법이란 무엇을 의미합니까? 난 당신과 같이 함수를 찾고 제대로 이해하면

는 :

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

아, 미안 해요, 난 하나 개의 사본의 이름을 변경하지만 다른하지, 내가 편집하자! – Bizzle

+0

술집은 d가 다른 일이 될 수 있음을 나타냅니다. 초기 함수가 int와 하루가 걸리도록이 값을 수정할 수 있습니까? 예를 들어 let next_n (n : int) (d : 일) : day = ..... – Bizzle

+1

예. 'function'은 우리의 예제에서'n : int' 인자를 취하고 즉시 그것에 일치하는 간단한 구문입니다. 당신은 나의 예제를 다음과 같이 재 작성 할 수있다 :'let rec next_n d n = n with ... '과 동등 할 것이다. 또한 형식 주석은 필요하지 않습니다. OCaml이 그들을 추론 할 것이다. – rgrinberg

관련 문제