3
我解析了FSharp中的代碼引用,並構建了模式助手。所有進行得很順利,直到我試圖FSharp活動模式的問題
let (|BinaryFn|_|) fn (input:Expr) =
function
| SpecificCall fn (_,_,l::r::[]) -> Some(l,r)
| _ -> None
let (|Multiply|_|) x =
function
| BinaryFn <@ (*) @> (l,r) -> Some(l,r)
| _ -> None
的目的是有一個通用的二元函數匹配,返回「」左'和'右',然後創建專門的二進制的匹配,如多,分水嶺並添加和減去。
不過,我在第二圖案得到一個錯誤
Error FS0001: Type mismatch. Expecting a
'a -> 'b option
but given a
'a -> 'c -> (Expr * Expr) option
The type ''a option' does not match the type
''b -> (Expr * Expr) option' (FS0001) (Shambolics)
有人可以請賜教什麼我應該在這裏幹什麼?
您的第一個模式是期待2或3個參數嗎?我認爲你的意思是2,但你現在得到兩個有名的和一個隱含的(通過'function'表達式)。 – 2013-03-12 20:30:47
我剛剛通過函數發現了隱式參數。如果你想做出答案,表明我將其標記爲正確。 – bradgonesurfing 2013-03-12 20:33:41