2012-05-04 5 views
1

私は、次の操作を実行したいと思います:jason(agentspeak)の信念を逆にするか構築する方法は?

信念の引数は新しい信念になり、引数がbeliefnameになるように、私は信念として引数で当初の目標を持っている、と私はそれを逆にしたいと思います。このような

何か:

//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 

だから、私の質問は、hogyこのように信念をconstractするには?

答えて

1

あなたがTのために行うように用語を構築:

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

ブックProgramming Multi-Agent Systems in AgentSpeak using Jasonから: はここに少し異なる動作をすることをプロローグでも利用できる

つのオペレータ(なぜなら述語注釈のありません利用可能な のProlog)は '=..'であり、リテラルをリストに分解するために使用されます。結果の リストの形式は[functor, list of arguments, list of annotations]です。たとえば、 p(b,c)[a1,a2] =.. [p, [b,c], [a1,a2]]です。

+0

一方、私はそれを理解しました。あなたのソリューションは構文的に間違っていますが、かなり近いです。あなたが気にしないなら、私はそれを編集し、それを受け入れます。 – Adamsan

+0

良い!私は非常にうまくいった次のコードを試しました! !translate(barks(dog))。 +!translate(T)< - T = .. [A、[B]、C]; X = .. [B、[A]]; + X。 –

関連する問題