Не уверен, что здесь много программистов на act-r, но я не могу найти форум / группу для этого где-либо, поэтому ...
Я пишу программу, которая в качестве чанка определяется как (и цель ниже):
(chunk-type position position-x position-y)
(chunk-type goal state last-pos)
В производстве я извлекаю положение объекта на экране из визуального местоположения, а затем мне нужно создать блок позиции и поместить его в слот последнего пункта моей цели. Вот производственное правило:
(P attend-projectile
=goal>
ISA goal
state nil
=visual-location>
screen-x =pos-x
screen-y =pos-y
?visual>
state free
==>
+visual>
cmd move-attention
screen-pos =visual-location
=goal>
state attended
last-pos (position pos-x screen-x pos-y screen-y)
)
Или что-то в этом роде. Я пробовал различные синтаксисы. Проблема сводится к:
- Мне нужно создать экземпляр чанка внутри производства (чанк позиции) на основе значений, восстановленных в lhs,
- затем назначьте этот кусок в ячейку ворот.
Каким-то образом я не могу найти эквивалентный пример в документе ...
EDIT:
Мне нужно, чтобы это был кусок, а не просто сохранение позиции x & y. В конечном итоге этот фрагмент будет расширен для включения идентификатора (который будет получен из визуального местоположения, например, для каждого движущегося объекта будет назначена другая буква). Я буду отслеживать эти объекты во времени. Поскольку я отслеживаю время, другой блок (траектория) будет содержать 3 блока позиции (с их идентификаторами).
Другие производители ожидают найти этот фрагмент (траекторию, когда у меня будет 3 блока позиции) и примут решения на основе этого.
Очевидно, что выше приведен фрагмент кода. Но концептуальная трудность, с которой я столкнулся, - это манипулирование (создание / создание, как это называется в актерской нотации) кусками во время выполнения, по сути.