Ограничьте OPA Rego одним правилом
Если у меня есть такое правило: (детская площадка)
package play
rule[message] {
max_index := count(input)-1
some i
index_a = i
index_b = (max_index-i)
point_a := input[index_a]
point_b := input[index_b]
point_a != point_b
message := sprintf("%d (%s) and %d (%s)", [index_a, point_a, index_b, point_b])
}
и введите этот ввод:
["a", "b", "c"]
У меня есть несколько решений для своего правила, например
"0 (a) and 2 (c)",
"2 (c) and 0 (a)"
Есть ли способ остановить поиск OPA после того, как будет найдено какое-либо решение?
1 ответ
Решение
Сегодня нет возможности попросить OPA остановиться после единственного ответа. Алгоритмы это поддерживают, но, похоже, людям это не нужно.
Вы, безусловно, можете запросить первый ответ, который найдет OPA, превратив свой набор в массив и захватив первый элемент. Детская площадка
array_rule = [message | rule[message]]
first = array_rule[0]
В качестве альтернативы, если порядок важен, вы можете написать свою логику как понимание массива для начала, а затем снова захватить первый элемент. Детская площадка
array_rule = [message |
max_index := count(input)-1
some i
index_a = i
index_b = (max_index-i)
point_a := input[index_a]
point_b := input[index_b]
point_a != point_b
message := sprintf("%d (%s) and %d (%s)", [index_a, point_a, index_b, point_b])
]
first = array_rule[0]