【发布时间】:2011-12-01 11:17:49
【问题描述】:
我有一条包含 3 个属性的消息:类型、货币和金额。
我有一个包含 4 个属性的规则:目的地、消息类型、货币和金额。
我想通过我的规则并在消息类型上找到与消息匹配并返回目标,如果没有匹配则返回 null
我在消息和规则中字段的固定位置使用了一个向量,我已经将它们定义如下:
user=> (def msg [100, "USD", 100])
#’user/msg
user=> (def rules [["FAL" 100 "UKP" 100] ["FBC" 101 "USD" 100]])
#’user/rules
然后我定义了一些从规则和消息中提取消息类型的函数:
user=>(defn rule-mt [[_ mt]] mt)
#’user/rule-mt
user=>(defn msg-mt [[mt]] mt)
#’user/msg-mt
我已经定义了一个函数来匹配消息类型,如下所示:
user=>(defn match-mt [ msg rule ] ( = ( rule-mt rule ) ( msg-mt msg ) ) )
#’user/match-mt
所以我可以直接调用这个来检查它是否符合第一条规则:
user=>(match-mt msg (rules 0))
true
然后看是否符合第二条规则:
(match-mt msg (rules 1))
false
如何迭代我的规则(向量的向量)调用匹配函数,然后返回匹配规则的目标字段(规则的第一个字段)?
【问题讨论】: