function clojure_merge( t, s ) {
for( var i in s ) {
t[ i ] = s[ i ];
}
return t;
};
function clojure_Namespace( m ) {
clojure_merge( this, m || {} );
};
clojure_global = this;
clojure = new clojure_Namespace({
in_ns: function(s) {
var nsparts = s.substring(1).split('.');
var base = clojure.JS.global;
for( var i = 0; i < nsparts.length; ++i ) {
if( ! base[nsparts[i]] ) {
base[nsparts[i]] = new clojure.lang.Namespace();
}
base = base[nsparts[i]];
}
},
refer: function(s) {},
seq: function(coll){
if( coll === null ) return null;
else if( coll.seq ) return coll.seq();
//else if( coll.constructor === String )
// return clojure.lang.StringSeq.create(coll);
else if( typeof coll.length == typeof 0 )
return clojure.lang.ArraySeq.create(coll);
else if( typeof coll === typeof {} )
return clojure.JS.ObjSeq.create(coll);
throw ("Don't know how to create ISeq from: " +
(typeof coll) + " " + coll.constructor.name);
},
apply: function( f ) {
if( f.isVariatic ) {
// lazy
var i, args = [];
var eagercount = Math.min( f.arity, arguments.length - 2 );
for( i = 0; i < eagercount; ++i ) {
args.push( arguments[ i + 1 ] );
}
if( eagercount == f.arity ) {
if( arguments.length - eagercount < 3 ) {
args.push( clojure.seq( arguments[ arguments.length - 1 ] ) );
}
else {
args.push( clojure.concat(
new clojure.lang.ArraySeq(
null, arguments, eagercount + 1, arguments.length - 1 ),
arguments[ arguments.length - 1 ] ) );
}
}
else {
var s = clojure.seq( arguments[ arguments.length - 1 ] );
for( ; s && args.length < f.arity; s = s.rest() ) {
args.push( s.first() );
}
args.push( s );
}
return f.apply( clojure.JS.variatic_sentinel, args );
}
else {
// non-lazy
var args = [];
for( var i = 1; i < arguments.length - 1; ++i ) {
args.push( arguments[ i ] );
}
for( var s = arguments[ arguments.length - 1]; s; s = s.rest()) {
args.push( s.first() );
}
return f.apply( null, args );
}
},
first: function(x) {
if( x.first ) return x.first();
var seq = clojure.seq( x );
if( seq === null ) return null;
return seq.first();
},
rest: function(x) {
if( x.rest ) return x.rest();
var seq = clojure.seq( x );
if( seq === null ) return null;
return seq.rest();
},
second: function(x) { return clojure.first(clojure