当第一个查询失败时,如何在 JASON AgentSpeak 中执行第二个计划
How to execute a second plan, when the first fail in qwery, in JASON AgnetSpeak
我的程序有点问题,在一个部分中,一个代理 X 向代理 Y 发送了一个 tell
,这个代理检查他的信念基础以验证事实,问题是当计划失败,他尝试添加一个 -plan
但它没有用,我感谢任何帮助,我已经更改了问题的上下文以便更好地理解,但主要思想是相同的
/* Initial beliefs and rules */
wedding_guests(约翰)。
wedding_guests(安娜)。
wedding_guests(鲍勃)。
wedding_guests(ed).
/*初始目标*/
/* 计划 */
+I_can_enter(R)[来源(Ag)] <-
?wedding_guests(R)
.print(R,"你在客人名单上")
里斯戈2.
-I_can_enter(R) <-
.print("你不能通过").
失败计划只能用于目标,在您的情况下,计划 +i_can_enter...
对新信念而非新目标做出反应。计划 -i_can_enter....
对删除这种信念做出反应。 (注意i_can_enter
中要小写,否则就是变量。)
有很多方法可以解决您的问题:
使用施行语achieve
代替tell
,这样接收者就会有一个新的目标而不是新的信念。然后计划可能是 +!i_can_enter(R) ...
,计划失败是 -!i_can_enter(R) ...
。
将测试置于计划的上下文中:
+i_can_enter(R)[source(Ag)] : wedding_guests(R) <- .print(R,"You are on the guest list").
+i_can_enter(R) <- .print("You can not pass").
- 使用
askOne
表演。在接收器中:
+?can_enter(R,ok) : wedding_guests(R). // R can enter if it is a wedding guest
+?can_enter(R,nok). // R cannot otherwise
在发件人中:
.send(receiver_name, askOne, can_enter(john,_), can_enter(_,ok)); // only continue if answer is "ok"
或
.send(receiver_name, askOne, can_enter(john,_), can_enter(_,A));
.print("it is ",A," for john to enter");
.send 中的第四项与答案统一。
我的程序有点问题,在一个部分中,一个代理 X 向代理 Y 发送了一个 tell
,这个代理检查他的信念基础以验证事实,问题是当计划失败,他尝试添加一个 -plan
但它没有用,我感谢任何帮助,我已经更改了问题的上下文以便更好地理解,但主要思想是相同的
/* Initial beliefs and rules */
wedding_guests(约翰)。 wedding_guests(安娜)。 wedding_guests(鲍勃)。 wedding_guests(ed).
/*初始目标*/
/* 计划 */
+I_can_enter(R)[来源(Ag)] <- ?wedding_guests(R) .print(R,"你在客人名单上") 里斯戈2.
-I_can_enter(R) <- .print("你不能通过").
失败计划只能用于目标,在您的情况下,计划 +i_can_enter...
对新信念而非新目标做出反应。计划 -i_can_enter....
对删除这种信念做出反应。 (注意i_can_enter
中要小写,否则就是变量。)
有很多方法可以解决您的问题:
使用施行语
achieve
代替tell
,这样接收者就会有一个新的目标而不是新的信念。然后计划可能是+!i_can_enter(R) ...
,计划失败是-!i_can_enter(R) ...
。将测试置于计划的上下文中:
+i_can_enter(R)[source(Ag)] : wedding_guests(R) <- .print(R,"You are on the guest list").
+i_can_enter(R) <- .print("You can not pass").
- 使用
askOne
表演。在接收器中:
+?can_enter(R,ok) : wedding_guests(R). // R can enter if it is a wedding guest
+?can_enter(R,nok). // R cannot otherwise
在发件人中:
.send(receiver_name, askOne, can_enter(john,_), can_enter(_,ok)); // only continue if answer is "ok"
或
.send(receiver_name, askOne, can_enter(john,_), can_enter(_,A));
.print("it is ",A," for john to enter");
.send 中的第四项与答案统一。