All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jason.stdlib.add_annot Maven / Gradle / Ivy

Go to download

Jason is a fully-fledged interpreter for an extended version of AgentSpeak, a BDI agent-oriented logic programming language.

There is a newer version: 2.3
Show newest version
package jason.stdlib;

import jason.JasonException;
import jason.asSemantics.DefaultInternalAction;
import jason.asSemantics.InternalAction;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.ListTerm;
import jason.asSyntax.ListTermImpl;
import jason.asSyntax.Literal;
import jason.asSyntax.Term;

/**
  

Internal action: .add_annot.

Description: adds an annotation to a literal.

Parameters:

  • + belief(s) (literal or list): the literal where the annotation is to be added. If this parameter is a list, all literals in the list will have the annotation added.
  • + annotation (structure): the annotation.
  • +/- annotated beliefs(s) (literal or list): this argument unifies with the result of the annotation addition.

Examples:

  • .add_annot(a,source(jomi),B): B unifies with a[source(jomi)].
  • .add_annot(a,source(jomi),b[jomi]): fails because the result of the addition does not unify with the third argument.
  • .add_annot([a1,a2], source(jomi), B): B unifies with [a1[source(jomi)], a2[source(jomi)]].

Note: instead of using this internal action, you can use direct unification.
.add_annot(a,source(jomi),B) can be replaced by B = a[source(jomi)];
.add_annot(X,source(jomi),B) can be replaced by B = X[source(jomi)]. @see jason.stdlib.add_nested_source */ public class add_annot extends DefaultInternalAction { private static InternalAction singleton = null; public static InternalAction create() { if (singleton == null) singleton = new add_annot(); return singleton; } @Override public int getMinArgs() { return 3; } @Override public int getMaxArgs() { return 3; } @Override public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { checkArguments(args); Term result = addAnnotToList(un, args[0], args[1]); return un.unifies(result,args[2]); } protected Term addAnnotToList(Unifier unif, Term l, Term annot) throws JasonException { if (l.isList()) { ListTerm result = new ListTermImpl(); for (Term lTerm: (ListTerm)l) { Term t = addAnnotToList( unif, lTerm, annot); if (t != null) { result.add(t); } } return result; } else if (l.isLiteral()) { return ((Literal)l).forceFullLiteralImpl().copy().addAnnots(annot); } return l; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy