2
我在樹上寫了一些解析代碼。 (即在斯坦福NLP依賴關係樹)Haskell模糊模式匹配調度
基本上我有這樣的功能:
m :: DepTree -> Logic
m (w, [E "nsubj" nsubj, E "dobj" dobj]) = ...
m (w, [E "nsubj" nsubj, E "prep" prep]) = ...
m (w, [E "nsubj" nsubj]) = ...
m (_, []) = error "No rules apply"
我想是派遣到第一個規則,如果節點有一個nsubj
和dobj
邊緣走出來的它。我不在乎它還有什麼。
很明顯,我的示例函數沒有這樣做,因爲它需要邊以正確的順序出現,而且如果存在更多的邊,它將不匹配。
一種方法可以是使用警衛更多的表現力,我可以這樣做:
m (w, es) | (isJust.lookup "nsubj") es && (isJust.lookup "dobj") es = ...
| ...
| otherwise = error ...
但是,這是一個很多paintful,我甚至不得到目標節點上的手柄。
有沒有一種標準的方式來寫圖案匹配解析器在像我這樣的圖上?或者也許有一些基於Maybe monad的魔法..?
@ dave4420:雖然它可能是很好的做法,包括編譯,圖案衛兵自2010年Haskell的標準,因此在默認情況下啓用GHC。 – hammar 2013-03-15 22:18:21
我沒有意識到。我很抱歉。 – dave4420 2013-03-15 22:26:44