2015-10-16 116 views
1

我在我的代碼中有一個錯誤。你能幫助我嗎,並告訴我如何使用函數,它在if語句中返回布爾值?OCaml。關於如果陳述

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

至於我可以看到你的問題在您的通話poltest。你已經定義了這兩個函數,以便它們有三個獨立的參數,但是你將它們傳遞給一個表示奇怪函數調用的單個參數。

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。大。非常感謝!!! –