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