Я пытаюсь написать общее правило, которое активируется, когда присутствуют два факта, подобных этим:
(Vector v1 3 4 5)
(Вектор v2 1 3 10 15 5 2 4)
(Элементы 4 5 3)
Итак, моя проблема в том, что я не знаю, как сопоставить ВСЕ неупорядоченные элементы в векторе, чтобы применить правило.
Я хочу, чтобы правило активировалось, только когда ВСЕ элементы из Элементов присутствуют, не принимая во внимание, если они следуют в том же порядке.
Мне не удалось этого добиться, поэтому я прошу помощи.
Примеры правил, не делающих то, что я хочу:
(defrule Equal
(Elements $?x)
(Vector ?name $?y)
(test (member$ $?x $?y))
=>
(printout t ?name crlf)
)
* Проблема этого в том, что он срабатывает, когда оба поля пусты, и в основном, когда в? Y содержится единственный член? X, но я хочу, чтобы правило запускалось, когда ВСЕ элементы в? X находятся в? Y .
Я тоже пытался использовать этот более простой:
(defrule Equal
(Elements $? $?x $?)
(Vector ?name $? $?y $?)
=>
(printout t ?name crlf)
)
Но в этом случае правило активируется только тогда, когда элементы абсолютно одинаковы и упорядочены одинаково, но я хочу иметь гибкость элементов, не упорядочивая их точно так, как они отображаются в векторе.