Предположим, у меня есть следующий набор определений, которые показывают входы и выходы различных ступеней электрической цепи. Я не включаю все классы и экземпляры, так как не думаю, что это имеет отношение к моей проблеме. Я включу фотографию, которая поможет вам понять, как эта проблема работает.
Здесь input1 поступает на сумматор A1 в качестве обоих входов. Input3 и input4 переходят к множителю Π2 в качестве входов.
definstances facts(
([command_10_inp1] of command_data
(clock 10)
(object [input_1])
(value 6))
([command_10_inp2] of command_data
(clock 10)
(object [input_2])
(value 4))
([command_10_inp3] of command_data
(clock 10)
(object [input_3])
(value 25))
([command_10_inp4] of command_data
(clock 10)
(object [input_4])
(value 12))
([command_1_inp1] of command_data
(clock 1)
(object [input_1])
(value 21))
([command_1_inp2] of command_data
(clock 1)
(object [input_2])
(value 28))
([command_1_inp3] of command_data
(clock 1)
(object [input_3])
(value 10))
([command_1_inp4] of command_data
(clock 1)
(object [input_4])
(value 25))
([command_2_inp1] of command_data
(clock 2)
(object [input_1])
(value 7))
([command_2_inp2] of command_data
(clock 2)
(object [input_2])
(value 25))
([command_2_inp3] of command_data
(clock 2)
(object [input_3])
(value 13))
([command_2_inp4] of command_data
(clock 2)
(object [input_4])
(value 15))
([command_3_inp1] of command_data
(clock 3)
(object [input_1])
(value 11))
([command_3_inp2] of command_data
(clock 3)
(object [input_2])
(value 17))
([command_3_inp3] of command_data
(clock 3)
(object [input_3])
(value 24))
([command_3_inp4] of command_data
(clock 3)
(object [input_4])
(value 31))
([command_4_inp1] of command_data
(clock 4)
(object [input_1])
(value 18))
([command_4_inp2] of command_data
(clock 4)
(object [input_2])
(value 11))
([command_4_inp3] of command_data
(clock 4)
(object [input_3])
(value 28))
([command_4_inp4] of command_data
(clock 4)
(object [input_4])
(value 21))
([command_5_inp1] of command_data
(clock 5)
(object [input_1])
(value 25))
([command_5_inp2] of command_data
(clock 5)
(object [input_2])
(value 24))
([command_5_inp3] of command_data
(clock 5)
(object [input_3])
(value 30))
([command_5_inp4] of command_data
(clock 5)
(object [input_4])
(value 10))
([command_6_inp1] of command_data
(clock 6)
(object [input_1])
(value 12))
([command_6_inp2] of command_data
(clock 6)
(object [input_2])
(value 19))
([command_6_inp3] of command_data
(clock 6)
(object [input_3])
(value 11))
([command_6_inp4] of command_data
(clock 6)
(object [input_4])
(value 19))
([command_7_inp1] of command_data
(clock 7)
(object [input_1])
(value 1))
([command_7_inp2] of command_data
(clock 7)
(object [input_2])
(value 31))
([command_7_inp3] of command_data
(clock 7)
(object [input_3])
(value 7))
([command_7_inp4] of command_data
(clock 7)
(object [input_4])
(value 22))
([command_8_inp1] of command_data
(clock 8)
(object [input_1])
(value 0))
([command_8_inp2] of command_data
(clock 8)
(object [input_2])
(value 31))
([command_8_inp3] of command_data
(clock 8)
(object [input_3])
(value 3))
([command_8_inp4] of command_data
(clock 8)
(object [input_4])
(value 23))
([command_9_inp1] of command_data
(clock 9)
(object [input_1])
(value 31))
([command_9_inp2] of command_data
(clock 9)
(object [input_2])
(value 1))
([command_9_inp3] of command_data
(clock 9)
(object [input_3])
(value 6))
([command_9_inp4] of command_data
(clock 9)
(object [input_4])
(value 8))
([reading_10_m1] of reading_data
(clock 10)
(object [m1])
(value 12))
([reading_10_m2] of reading_data
(clock 10)
(object [m2])
(value 31))
([reading_10_m3] of reading_data
(clock 10)
(object [m3])
(value 12))
([reading_10_out] of reading_data
(clock 10)
(object [out1])
(value 28))
([reading_1_m1] of reading_data
(clock 1)
(object [m1])
(value 10))
([reading_1_m2] of reading_data
(clock 1)
(object [m2])
(value 24))
([reading_1_m3] of reading_data
(clock 1)
(object [m3])
(value 26))
([reading_1_out] of reading_data
(clock 1)
(object [out1])
(value 18))
([reading_2_m1] of reading_data
(clock 2)
(object [m1])
(value 0))
([reading_2_m2] of reading_data
(clock 2)
(object [m2])
(value 0))
([reading_2_m3] of reading_data
(clock 2)
(object [m3])
(value 3))
([reading_2_out] of reading_data
(clock 2)
(object [out1])
(value 3))
([reading_3_m1] of reading_data
(clock 3)
(object [m1])
(value 22))
([reading_3_m2] of reading_data
(clock 3)
(object [m2])
(value 6))
([reading_3_m3] of reading_data
(clock 3)
(object [m3])
(value 8))
([reading_3_out] of reading_data
(clock 3)
(object [out1])
(value 14))
([reading_4_m1] of reading_data
(clock 4)
(object [m1])
(value 4))
([reading_4_m2] of reading_data
(clock 4)
(object [m2])
(value 12))
([reading_4_m3] of reading_data
(clock 4)
(object [m3])
(value 12))
([reading_4_out] of reading_data
(clock 4)
(object [out1])
(value 0))
([reading_5_m1] of reading_data
(clock 5)
(object [m1])
(value 18))
([reading_5_m2] of reading_data
(clock 5)
(object [m2])
(value 16))
([reading_5_m3] of reading_data
(clock 5)
(object [m3])
(value 12))
([reading_5_out] of reading_data
(clock 5)
(object [out1])
(value 12))
([reading_6_m1] of reading_data
(clock 6)
(object [m1])
(value 8))
([reading_6_m2] of reading_data
(clock 6)
(object [m2])
(value 24))
([reading_6_m3] of reading_data
(clock 6)
(object [m3])
(value 17))
([reading_6_out] of reading_data
(clock 6)
(object [out1])
(value 9))
([reading_7_m1] of reading_data
(clock 7)
(object [m1])
(value 2))
([reading_7_m2] of reading_data
(clock 7)
(object [m2])
(value 0))
([reading_7_m3] of reading_data
(clock 7)
(object [m3])
(value 26))
([reading_7_out] of reading_data
(clock 7)
(object [out1])
(value 26))
([reading_8_m1] of reading_data
(clock 8)
(object [m1])
(value 0))
([reading_8_m2] of reading_data
(clock 8)
(object [m2])
(value 0))
([reading_8_m3] of reading_data
(clock 8)
(object [m3])
(value 0))
([reading_8_out] of reading_data
(clock 8)
(object [out1])
(value 0))
([reading_9_m1] of reading_data
(clock 9)
(object [m1])
(value 30))
([reading_9_m2] of reading_data
(clock 9)
(object [m2])
(value 30))
([reading_9_m3] of reading_data
(clock 9)
(object [m3])
(value 12))
([reading_9_out] of reading_data
(clock 9)
(object [out1])
(value 28))
)
)
Используя следующие правила утверждения, я могу получить список всех фактов, к которым относятся вход или датчик:
(defrule assert-inputs
(object (is-a command_data) (clock ?clock) (object ?object) (value ?value))
=>
(assert (fact ?clock ?object ?value)))
(defrule assert-outputs
(object (is-a reading_data) (clock ?clock) (object ?object) (value ?value))
=>
(assert (fact ?clock ?object ?value)))
Я хочу каким-то образом иметь возможность обрабатывать все входные данные в фактах и видеть, что происходит после того, как они передают сумматор или множитель. Мне удалось сделать это для A1, потому что он принимает в качестве входных данных только input1 два раза, как это:
(defrule check_a1
(fact ?clock ?object ?value)
(test (eq ?object [input_1]))
=>
(assert (fact ?clock [m1t] (mod(+ ?value ?value)(** 2 5)))))
Однако множитель Π2 принимает в качестве входных данных два разных значения input3 и input4. Используя следующее, я могу распечатать все факты из input3 или input4. Проблема в том, что я не знаю, как использовать их таким же образом, как я использовал их выше, когда они были только один, так как для каждого нового факта, который я хочу создать, у меня есть два разных значения. Есть ли простой способ получить доступ к этим значениям? Я попытался привязать их к другой переменной и получить к ним доступ, например, к nth $ 1 и nth $ 2, но не смог заставить его работать.
(defrule check_p2
(fact ?clock ?object ?value)
(test (or (eq ?object [input_3]) (eq ?object [input_4])))
=>
(printout t ?clock " " ?object " " ?value crlf))