2015-10-16 2 views
1

У меня есть ошибка в моем коде. Можете ли вы мне помочь, и расскажите, как использовать функции, которые возвращают команду bool in if?OCaml. about if statment

let pol a b c = 
    let p=(a+.b+.c)/.2.0 in sqrt(p*.(p-.a)*.(p-.b)*.(p-.c));; 

let test a b c = 
    (a+.b)>c &&(b+.c)>a &&(a+.c)>b 

let main a b c = 
    let w=test(a b c) in(
    if w 
    then pol (a b c) 
    else raise(Failure "Error"));; 

ответ

2

Насколько я могу видеть ваши проблемы в ваших звонков pol и test. Вы определили обе эти функции так, что они принимают три отдельных аргумента, но вы передаете им как один аргумент, представляющий странный вызов функции.

вызов идиоматических функция в OCaml не имеет круглые скобки:

# let f a b = a + b;; 
val f : int -> int -> int = <fun> 
# f 3 8;; 
- : int = 11 

Вы пытаетесь сделать что-то больше, как это:

# f (3 8);; 
Error: This expression has type int 
     This is not a function; it cannot be applied. 

Как вы можете видеть, если вы пишете (3 8) вам просить обработать 3 как функцию, которая должна быть передана 8 в качестве аргумента. В вашем коде есть аналогичная проблема с (a b c).

+0

WOW. Отлично. Спасибо!!! –