Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  // Copyright (C) 2003  Rafael H. Bordini, Jomi F. Hubner, et al.
  // This library is free software; you can redistribute it and/or
  // modify it under the terms of the GNU Lesser General Public
  // License as published by the Free Software Foundation; either
  // version 2.1 of the License, or (at your option) any later version.
  // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // Lesser General Public License for more details.
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 // To contact the authors:
 package jason.stdlib;
Implementation of while.


while ( logical formula ) {

while logical formula holds, the plan_body is executed.


+event : context
<- ....
while(vl(X) & X > 10) { // where vl(X) is a belief
.print("value > 10");
The unification resulted from the evaluation of the logical formula is used only inside the loop, i.e., the unification after the while is the same as before.

See also:
foreach for
 public class loop extends DefaultInternalAction {
     private static InternalAction singleton = null;
     public static InternalAction create() {
         if ( == null
              = new loop();
         return ;
     @Override public Term[] prepareArguments(Literal bodyUnifier un) {
         /*Term[] terms = new Term[body.getArity()];
         for (int i=0; i<terms.length; i++) {
             terms[i] = body.getTerm(i).clone();
         return terms;*/
         return body.getTermsArray();
     @Override public int getMinArgs() { return 2; }
     @Override public int getMaxArgs() { return 2; }
     @Override protected void checkArguments(Term[] argsthrows JasonException {
         super.checkArguments(args); // check number of arguments
         if ( !(args[0] instanceof LogicalFormula))
             throw JasonException.createWrongArgument(this,"first argument (test) must be a logical formula.");
         if ( !args[1].isPlanBody())
            throw JasonException.createWrongArgument(this,"second argument must be a plan body term.");
    public Object execute(TransitionSystem tsUnifier unTerm[] argsthrows Exception {
        IntendedMeans im = ts.getC().getSelectedIntention().peek();
        PlanBody whileia = im.getCurrentStep();
        // if the IA has a backup unifier, use that (it is an object term)
        if (args.length == 2) {
            // first execution of while
            // add backup unifier in the IA
            whileia = new PlanBodyImpl(.whileia.getBodyTerm().clone());
            ((Structure)whileia.getBodyTerm()).addTerm(new ObjectTermImpl(un.clone()));
        } else if (args.length == 3) {            
            // restore the unifier of previous iterations
            Unifier ubak = (Unifier)((ObjectTerm)args[2]).getObject();
        } else {
            throw JasonException.createWrongArgumentNb(this);
        LogicalFormula logExpr = (LogicalFormula)args[0]; 
        // perform one iteration of the loop
        Iterator<Unifieriu = logExpr.logicalConsequence(ts.getAg(), un); 
        if (iu.hasNext()) { 
            // add in the current intention:
            // 1. the body argument and
            // 2. the while internal action after the execution of the body
            //    (to test the loop again)
            PlanBody whattoadd = (PlanBody)args[1].clone();
            whattoadd.add(whileia); // the add clones whileia
        return true;
New to GrepCode? Check out our FAQ X