誰能告訴我什麼是以下錯誤消息在F#是指:F#奇怪類型的錯誤消息
Program.fs(1021,16): error FS0001: This expression was expected to have type
FSI_0051.ExprTree
but here has type
FSI_0061.ExprTree
這是執行以下功能的結果是:1021
let evaluate_tree tree =
let rec helper tree =
match tree with
| Value(x) -> Value(x)
| Node(l, op, r) -> evaluate (helper l) op (helper r)
get_float (helper tree)
線是最後一個在上面的函數中行。此外,我聲明瞭以下功能和類型,evaluate_tree
前:
type Operator =
| Plus
| Minus
| Mult
| Divide
type ExprTree =
| Value of float
| Node of ExprTree * Operator * ExprTree
static member (-) (a, b) =
match (a, b) with
| (Value(x), Value(y)) -> Value(x - y)
static member (+) (a, b) =
match (a, b) with
| (Value(x), Value(y)) -> Value(x + y)
static member (/) (a, b) =
match (a, b) with
| (Value(x), Value(y)) -> Value(x/y)
static member (*) (a, b) =
match (a, b) with
| (Value(x), Value(y)) -> Value(x*y)
注意,在下面的功能,當我沒加,說Node(_,_,_) -> 0.0
(註釋)線,它給了上面的錯誤消息。然而,當我說那行,錯誤消息走了(我仍想知道錯誤消息的意思):
let get_float value =
match value with
| Value(x) -> x
//| Node(_, _, _) -> 0.0
let evaluate (value1 : ExprTree) operator (value2 : ExprTree) =
match operator with
| Plus -> value1 + value2
| Minus -> value1 - value2
| Mult -> value1*value2
| Divide -> value1/value2
let evaluate_tree tree =
let rec helper tree =
match tree with
| Value(x) -> Value(x)
| Node(l, op, r) -> evaluate (helper l) op (helper r)
get_float (helper tree)
如進一步的說明:evaluate_tree
計算表達式樹。表達式樹包含ExprTree: Value and Node
中定義的類型。我認爲這可能與我在get_float
中提供的案例不同,因爲它是Node
(我最終考慮了這個)。然而,get_float
將永遠不會評估Node
,而不是以我使用它的方式進行評估,除非樹錯了(即它將有一個運算符作爲葉節點)。
在此先感謝!
我認爲這個錯誤信息意味着在F#交互中,在交互式會話中早期評估的ExprTree類型的兩個版本之間存在衝突。嘗試重置交互式會話並重新評估腳本中的所有值 – Petr