2015-09-13 116 views
2
type form = TRUE 
    |FALSE 
    |NOT of form 

let rec check x = function 
    TRUE   -> true 
    |FALSE   -> false 
    |NOT(y)   -> not eval y 
(*where TRUE, FALSE and NOT all custom type 'form'*) 

我試圖定義一個函數形式 - > BOOL,但我得到的編譯錯誤爲返回一個函數返回布爾VS返回布爾(OCaml的)

|NOT(y)   -> not eval y 

線。該錯誤消息指出

This expression type form -> bool, but an expression was expected of type bool 

雖然功能「的eval」返回「BOOL」類型,什麼是它不能用於返回布爾函數返回值的原因是什麼?

+1

不要忘記,功能結合到左側,所以最好寫'不(EVAL Y)':

let rec eval = function | TRUE -> true | FALSE -> false | NOT(y) -> not (eval y) 

與明確的輸入參數x另一種形式 –

回答

1

您定義的函數的類型(checkeval)是'a -> form -> bool。您匹配function關鍵字引入的隱式輸入參數。第一個參數x未使用(但預期)。

由於eval有兩個輸入參數,(eval y)表達式的類型爲form -> bool。這是錯誤信息。

試試這個:

let rec eval x = match x with 
    | TRUE -> true 
    | FALSE -> false 
    | NOT(y) -> not (eval y) 
+0

謝謝,我明白了! –