1
爲什麼我的模式在do塊重疊內匹配?爲什麼這些模式匹配重疊?
(q, m) <- newRq
let m2 = appendMsg "first" key m
(q4, m4) = case m2 of
m -> deleteRec key q m2
_ -> (q, m2)
這將編譯與警告
Warning: Pattern match(es) are overlapped
In a case alternative: _ -> ...
和我想不工作。看起來對於(q4,m4)它總是返回
[], fromList []
無視m2和m的值是什麼。有沒有我不指望他們的地方變量?
我想達到的目的是:如果m2和m相等,那麼(q4,m4)應計算爲deleteRec key q m2
,否則爲(q,m2)。
真了,如果,但我只是坐在一小時,以避免它,因爲我經常閱讀,這不是地道的,並且在Haskell開發人員儘可能應該使用模式匹配。 – 2012-02-17 22:43:06
是的,你*應該*儘可能使用模式匹配。但是不可能匹配變量的*值*。模式中的變量只是一個像「_」那樣的「洞」,可以帶任何東西;然後它將這個名字分配給那裏。 – 2012-02-17 22:43:50
if-then-else還有其他選擇嗎? – 2012-02-17 22:44:29