public override Term Call (Domain domain, Variable vari, Term[] args)
{
- Term[] newargs = new Term[args.Length];
-
+ args = (Term[]) args.Clone ();
for (int i = 0; i < args.Length; i++)
{
- newargs[i] = args[i].Eval (domain);
+ args[i] = args[i].Eval (domain);
if (domain.Thrown)
- return newargs[i];
+ return args[i];
}
- return builtin (domain, vari, newargs);
+ return builtin (domain, vari, args);
}
}
}
}
- public class Variable : Object
+ public class Variable : TermValue
{
public readonly Name name;
public string desc;
result.objval = list;
return result;
}
- vari.val.objval = list;
return vari.val;
}
return TermTerm;
}
- private static Term Fcatch (Domain domain, Variable vari, Term[] args)
+ public static Term Fcatch (Domain domain, Variable vari, Term[] args)
{
Term result = Zero;
try {
return result;
}
- private static Term Fthrow (Domain domain, Variable vari, Term[] args)
+ public static Term Fthrow (Domain domain, Variable vari, Term[] args)
{
domain.ThrowTag (new CatchTag (args[0].Nameval));
return (args.Length == 1 ? Zero : args[1]);
}
- public class Object
+ public class TermValue
{
public virtual Term Eval (Domain domain) { return new Term (this); }
}
- private class Funcall : Object
+ private class Funcall : TermValue
{
internal Function func;
internal Variable vari;
public Term (string str) { intval = 0; objval = str; }
public Term (List<Term> list) { intval = 0; objval = list; }
public Term (Term term) { intval = term.intval; objval = term.objval; }
- public Term (Object obj) { intval = 0; objval = obj; }
+ public Term (TermValue obj) { intval = 0; objval = obj; }
public Term (XmlNode node, Domain domain)
{
}
}
- public int Objval {
+ public object Objval {
get {
if (objval == null)
throw new Exception ("term is an integer: " + this);
return this;
if (objval is List<Term>)
return new Term ((List<Term>) objval);
- if (objval is Object)
- return ((Object) objval).Eval (domain);
+ if (objval is TermValue)
+ return ((TermValue) objval).Eval (domain);
throw new Exception ("invalid Term object: " + objval);
}