2015-01-16 2 views
1

OCaml을 배우려고합니다. 두 개의 부동 소수점을 사용하여 평균을 반환하는 함수를 작성했지만 구문 오류가 발생합니다.변수를 평균화하는 중 구문 오류가 발생했습니다.

let average a b = 
    (a +. b) /. 2.0;; 

print_float (average 5.0 -5.0);; 

명시된 오류가

This expression has type float -> float but an expression was expected of type int. 

하고 "평균 5.0"밑줄 선이있다. OCaml은 버전 4.01.0이고 시스템은 우분투 14.10입니다.

답변

0

나는 여기에서 일을하고 있습니다. 코드를보고 온라인 컴파일러에서 시도하면 다음과 같은 결과를 얻게됩니다.

# let average a b = 
# (a +. b) /. 2.0;; 
val average : float -> float -> float = <fun> 
# average 5.0 6.0;; 
- : float = 5.5 
# average 5.0 -6.0;; 
File "", line 1, characters 0-11: 
Error: This expression has type float -> float 
     but an expression was expected of type int 
# 

값 중 하나가 음수 float이면 오류가 발생합니다. 그 방향을 확인하십시오. 당신이 여분의 괄호를 피하려면

+2

이는 이유였다. 빼기 기호는 빼기 연산자로 해석됩니다. 따라서 평균 5.0에서 5.0을 뺍니다. 해결 방법은 음수를 괄호 안에 넣는 것입니다. 즉, print_float (평균 5.0 (-5.0)) ;; –

4

당신이 운영자가 나는 실제 코드에서 그것을 본 적이 것을보고 너무 서투른, 그러나 단항 부동 부정 연산자 ~-.

$ ocaml 
     OCaml version 4.01.0 

# let average a b = 
    (a +. b) /. 2.0;; 
val average : float -> float -> float = <fun> 
# print_float (average 5.0 ~-. 5.0);; 
0.- : unit =() 
# 

를 사용할 수 있습니다. 따라서 때때로 음수가있는 괄호를 사용해야합니다.

나는 약간의 독서와 실험을했고, 뺄셈과 부정에 대한 모든 사업자에 대한 설명을 쓴 : Unary minus and floating point number in OCaml

관련 문제