2014-03-28 76 views
0

我想做一個函數遍歷二叉樹,驗證一些條件,然後返回一個布爾值。二叉樹 - > Bool函數

val valid : dtree -> bool 

type dtree = 
     Decision of string * int * dtree * string * int * dtree 
     | Chance of string * int * dtree * string * int * dtree 
     | Outcome of int 
;; 

let rec valid dt = 
    match dt with 
      Decision(choiceL, costL, l, choiceR, costR, r) -> if choiceL=choiceR then false else valid l valid r 
     | Chance(eventL, probL, l, eventR, probR, r) -> if eventL=eventR && (probL + probR)<>100 then false else valid l valid r 
     | Outcome value -> true 
;; 

這給了我下面的錯誤:

 
Decision(choiceL, costL, l, choiceR, costR, r) -> if choiceL=choiceR then false else valid l **valid** r 
Error: This expression has type dtree -> 'a -> 'b -> 'c 
     but an expression was expected of type 'a 
# Interrupted. 
+0

我沒有得到同樣的錯誤信息,你。您應該更仔細地複製和粘貼您的代碼。無論如何,「有效的有效r」顯然是錯誤的。 '有效的l'是一個布爾值。你可以邏輯地使用另一個布爾,比如'valid r',語法是'(valid r)&&(valid l)'。 –

+0

謝謝,我會盡力的! – MMrj

+0

感謝它解決了它xD !,我仍然是這個語言的開始x) – MMrj

回答

1

如果我輸入你的代碼,我不明白你說的錯誤。

通過眼睛,這個代碼如下錯誤:

valid l valid r 

我希望更多的東西一樣:

valid l && valid r