2014-10-14 1 views
0

Ocaml을 사용하여 재귀 함수를 만들려고하지만 동일한 오류 코드가 계속 나타납니다. 내가 OCaml의에서 완전한 초보자 해요OCaml에서 재귀 도움말

Error: This expression has type int but an expression was expected of type unit

, 대학에서 모듈을 공부 :

let rec get x = 
if x > 7 then 
get x-7;; 

는 그리고의 매우 유용한 오류 메시지가 표시됩니다. 그리고 이것은 내 과제 중 하나이며, 나는 조금 붙어있다!

저는 원래 while 루프로하고 싶었습니다. (필자는 명령형 프로그래머 였기 때문에) 재귀 적으로 시도해 볼 생각이었습니다.

감사합니다.

답변

6

이 코드에는 두 가지 문제점이 있습니다. 먼저 x-7의 간격은 x - 7get으로 전달하려고하지만 실제로는 (get x) - 7으로 구문 분석됩니다. 즉, 쉽게 괄호로 고정 것 :

let rec get x = 
    if x > 7 then get (x - 7) 

두 번째 문제는 함수가 아무것도 반환의 기회의 대부분을하지 않도록 당신의 if에 대한 두 번째 암을하지 않아도됩니다. (한 팔 if는 효과를 입력 unit의 수 유용 촬영됩니다.)

당신은 아마 x 어쩌면, 7 미만이면 뭔가를 반환 할

: while 루프와 함께이 작성

let rec get x = 
    if x > 7 then get (x - 7) else x 

OCaml의 변수는 이름 만 변경할 수있는 위치가 아니라는 것을 이해해야한다. 변경할 수있는 장소를 명시 적으로 소개하고 조작해야합니다.

let get x = 
    let y = ref x in 
    while !y > 7 do 
    y := !y - 7; 
    done; 
    !y 

희망이 있습니다.

+0

감사합니다. :) – darkdan21