Как изменить или построить веру в Джейсона (agentpeak)?

Я хотел бы сделать следующее:

У меня есть первоначальная цель с аргументом в качестве убеждения, и я хотел бы изменить его так, чтобы аргумент убеждения стал новым убеждением, а аргумент стал именем убеждения.

Что-то вроде этого:

//Agent asker in project Test.mas2j
!translate(barks(dog)). //I would like to have the belief: dog(barks)
+!translate(T)<-
    T =.. [A,[B],C];
    .print("functor: ",A);
    .print("argument: ",B);
    //.print("source: ",C);
    +B(A);//<- I want something like this, but it gives a syntax error.
    +B. //<-this works, but it doesn't give the argument to it

Итак, мой вопрос: можно ли таким образом излагать убеждения?

1 ответ

Решение

Создайте термин, как вы делаете для T:

...
X =.. [B,[A]]; // constructs the belief
+X; // adds the belief to the current belief base
...

Из книги " Программирование мультиагентных систем в AgentSpeak с использованием Jason":

Один оператор, также доступный в Прологе, который работает здесь немного иначе (из-за аннотаций предикатов, недоступных в Прологе), это '=..', который используется для деконструкции литерала в список. Полученный список имеет формат [functor, list of arguments, list of annotations], например: p(b,c)[a1,a2] =.. [p, [b,c], [a1,a2]],

Другие вопросы по тегам