// Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
// Boston, MA 02110-1301, USA.
+// Please note that the code is not yet matured.
+
var Xex = {};
-(function () { // Tracing
+(function () { // Logging
// The logging node containing tracing information.
var log = null;
// Number of lines.
UncaughtThrow: "uncaught-throw"
};
-Xex.Variable = function (domain, name, desc, val, range)
+Xex.Variable = function (name, desc, val, range)
{
- this.domain = domain;
- this.name = name;
- this.desc = desc;
+ if (name)
+ this.name = name;
+ if (desc)
+ this.desc = desc;
this.val = val;
- this.range = range;
+ if (range)
+ this.range = range;
}
-Xex.Variable.prototype.clone = function ()
-{
- return new Xex.Variable (this.domain, this.name, this.desc,
- this.val, this.range);
-}
-
-Xex.Variable.prototype.Equals = function (obj)
-{
- return ((obj instanceof Xex.Variable)
- && obj.name == this.name);
-}
+Xex.Variable.prototype = {
+ clone: function ()
+ {
+ return new Xex.Variable (this.name, this.desc, this.val, this.range);
+ },
+ equals: function (obj)
+ {
+ return ((obj instanceof Xex.Variable)
+ && obj.name == this.name);
+ },
+ SetValue: function (term)
+ {
+ this.val = term;
+ return term;
+ }
+}
-Xex.Variable.prototype.SetValue = function (term)
-{
- this.val = term;
- return term;
-}
Xex.Function = function (name, with_var, min_args, max_args)
{
for (elt in parent.variables)
{
var vari = parent.variables[elt];
- this.variables[elt] = new Xex.Variable (this, vari.name, vari.desc,
+ this.variables[elt] = new Xex.Variable (vari.name, vari.desc,
vari.val, vari.range);
}
}
},
Defvar: function (name, desc, val, range)
{
- var vari = new Xex.Variable (this, name, desc, val, range);
+ var vari = new Xex.Variable (name, desc, val, range);
this.variables[name] = vari;
return vari;
},
{
var vari = this.variables[name];
if (! vari)
- vari = this.variables[name] = new Xex.Variable (this, name, null,
+ vari = this.variables[name] = new Xex.Variable (name, null,
Xex.Zero, null);
return vari;
},
IsTrue: function () { return true; },
Eval: function (domain) { return this.Clone (); },
Clone: function (domain) { return this; },
- Equals: function (obj)
+ equals: function (obj)
{
return (this.type == obj.type
&& this.val != undefined
&& obj.val == this.val);
},
- Matches: function (obj) { return this.Equals (obj); },
+ Matches: function (obj) { return this.equals (obj); },
toString: function ()
{
if (this.val != undefined)
return new Xex.Funcall (this.func, this.vari, this.args);
}
- proto.Equals = function (obj)
+ proto.equals = function (obj)
{
return (obj.type == 'funcall'
&& obj.func == this.func
- && obj.vari.Equals (this.vari)
+ && obj.vari.equals (this.vari)
&& obj.args.length == this.func.length);
}
return new Xex.ErrTerm (ename, message, false);
}
- proto.Equals = function (obj)
+ proto.equals = function (obj)
{
return (obj.IsError
&& obj.ename == ename && obj.message == message
proto.IsTrue = function () { return this.val.length > 0; }
proto.Clone = function () { return new Xex.LstTerm (this.val.slice (0)); }
- proto.Equals = function (obj)
+ proto.equals = function (obj)
{
if (obj.type != 'list' || obj.val.length != this.val.length)
return false;
var i, len = this.val.length;
for (i = 0; i < len; i++)
- if (! this.val[i].Equals (obj.val[i]))
+ if (! this.val[i].equals (obj.val[i]))
return false;
return true;
}
function Feq (domain, vari, args)
{
for (var i = 1; i < args.length; i++)
- if (! args[i - 1].Equals (args[i]))
+ if (! args[i - 1].equals (args[i]))
return Xex.Zero;
return Xex.One;
}