I managed to create an agent to count how many times actions it performed. Hence, I propose this asl code.
last_time(0).
!start.
/* Plans */
+!start : true <-
?last_time(X);
new_t = X + 1;
.print("take train " , X);
-+last_time(new_t);
!start.
But I am encountering an error.
[test] No failure event was generated for +!start[code((new_t = 1)),code_line(5),code_src("file:src/asl/test.asl"),error(constraint_failed),error_msg("Constraint (new_t = (X+1)); .print("take train ",X); -+last_time(new_t); !start was not satisfied (file:src/asl/test.asl:5) un={X=0}"),source(self)]
intention 1:
+!start[source(self)] <- ... (new_t = (X+1)); .print("take train ",X); -+last_time(new_t); !start / {X=0}
I think it may be due to line #5 (new_t = X + 1;) because my code runs well after line #5 is commented out. I am not sure why I can't increase it.
Notes:
- I am using Jason 3.1
Variables in Jason (as in Prolog, which inspired Jason) starts with uppercase letters. In your program, just replace new_t by New_t and it likely works.
The command
new_t = X + 1fails becausenew_tis not equals to1(the result of evaluation ofX+1. The=operator is the unification operator. It returns true if both arguments can be literally equal by some substitution of variables by values. In your program, there is no value forXthat makesX+1equals tonew_t. That is the reason we do not findX=X+1in Jason programs. This expression can not be true because there is no value for X that makes both arguments of the unification equal.