У меня есть сообщение с 3 атрибутами: тип, валюта и сумма.
У меня есть правило с 4 атрибутами, пунктом назначения, типом сообщения, валютой и суммой.
Я хочу просмотреть мои правила и найти совпадение с сообщением в типе сообщения и вернуть адресата, или ноль, если совпадения не было
Я использую вектор для фиксированных позиций полей в сообщении и правиле, я определил их следующим образом:
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
Как перебрать правила (вектор векторов), вызывая мою функцию сопоставления, а затем вернуть поле назначения соответствующего правила (первое поле правила)?