symbol.priority || insert.arg[0].symbol.rightparen) {
expr=new Expr(symbol, [expr,insert.arg[0]], symbol.priority);
insert.arg[0]=expr;
} else {
expr=new Expr(symbol, [expr,insert.arg[0].arg[0]], symbol.priority);
insert.arg[0].arg[0]=expr;
}
expr=right;
}
return [expr,str];
}
function parse(str) {
var temp = str2expr(str);
if (temp[1].slice(0,5)=="Error") document.write(""+temp[1]+"
");
else if (temp[1].slice(0,5)!="") document.write("
Parse Leftover: "+temp[1]+"
");
//still have to check arities of expressions
return temp[0];
}
function outputList(li) {
for (var i=0; i
=str
}
function inverse(v) {
if (v=="x") return "X";
if (v=="X") return "x";
if (v=="y") return "Y";
if (v=="Y") return "y";
if (v=="z") return "Z";
if (v=="Z") return "z";
if (v=="a") return "A";
if (v=="A") return "a";
if (v=="b") return "B";
if (v=="B") return "b";
if (v=="c") return "C";
if (v=="C") return "c";
if (v=="d") return "D";
if (v=="D") return "d";
return "Error";
}
function invert(t) {
if (t.symbol==unit) return t;
if (t.symbol.name=="A") return new Expr(vari[0], []);
if (t.symbol.name=="a") return new Expr(vari[1], []);
if (t.symbol.name=="B") return new Expr(vari[2], []);
if (t.symbol.name=="b") return new Expr(vari[3], []);
if (t.symbol.name=="C") return new Expr(vari[4], []);
if (t.symbol.name=="c") return new Expr(vari[5], []);
if (t.symbol.name=="D") return new Expr(vari[6], []);
if (t.symbol.name=="d") return new Expr(vari[7], []);
if (t.symbol.name=="X") return new Expr(vari[8], []);
if (t.symbol.name=="x") return new Expr(vari[9], []);
if (t.symbol.name=="Y") return new Expr(vari[10], []);
if (t.symbol.name=="y") return new Expr(vari[11], []);
if (t.symbol.name=="Z") return new Expr(vari[12], []);
if (t.symbol.name=="z") return new Expr(vari[13], []);
if (t.symbol==meet)
return new Expr(join,[invert(t.arg[0]),invert(t.arg[1])]);
if (t.symbol==join)
return new Expr(meet,[invert(t.arg[0]),invert(t.arg[1])]);
if (t.symbol==times)
return new Expr(times,[invert(t.arg[1]),invert(t.arg[0])]);
if (t.symbol==over)
return new Expr(times,[t.arg[1],invert(t.arg[0])]);
if (t.symbol==under)
return new Expr(times,[invert(t.arg[1]),t.arg[0]]);
}
function trou(t) {
if (t.symbol==unit || t.symbol.vari) return t;
if (t.symbol==meet || t.symbol==join || t.symbol==times)
return new Expr(t.symbol,[trou(t.arg[0]),trou(t.arg[1])]);
if (t.symbol==over)
return new Expr(times,[trou(t.arg[0]),invert(trou(t.arg[1]))]);
if (t.symbol==under)
return new Expr(times,[invert(trou(t.arg[0])),trou(t.arg[1])]);
alert("error "+t.symbol);
}
function negcone(t) {
if (t.symbol==unit) return t;
if (t.symbol.vari) return new Expr(meet, [t,new Expr(unit,[])]);
if (t.symbol==over)
return new Expr(meet,
[new Expr(over,[negcone(t.arg[0]),negcone(t.arg[1])]),new Expr(unit,[])]);
if (t.symbol==under)
return new Expr(meet,
[new Expr(under,[negcone(t.arg[0]),negcone(t.arg[1])]),new Expr(unit,[])]);
if (t.symbol==times)
return new Expr(times,[negcone(t.arg[0]),negcone(t.arg[1])]);
if (t.symbol==join)
return new Expr(join,[negcone(t.arg[0]),negcone(t.arg[1])]);
if (t.symbol==meet)
return new Expr(meet,[negcone(t.arg[0]),negcone(t.arg[1])]);
}
function gmv(t) {
if (t.symbol==unit) return t;
if (t.symbol.vari) return new Expr(join, [t,new Expr(vari[6],[])]);
if (t.symbol==over)
return new Expr(over,[gmv(t.arg[0]),gmv(t.arg[1])]);
if (t.symbol==under)
return new Expr(under,[gmv(t.arg[0]),gmv(t.arg[1])]);
if (t.symbol==times)
return new Expr(join,
[new Expr(times,[gmv(t.arg[0]),gmv(t.arg[1])]),new Expr(vari[6],[])]);
if (t.symbol==join)
return new Expr(join,[gmv(t.arg[0]),gmv(t.arg[1])]);
if (t.symbol==meet)
return new Expr(meet,[gmv(t.arg[0]),gmv(t.arg[1])]);
}
function objToString(a) {
var st="";
//document.write("\n
type=",typeof a);
if (typeof a =="string") st="\""+a+"\"";
else if (a.length>0) {
for (var i=0; iAssignmentsList w="+w+" v="+v+" a.length="+a.length);
for (j=i+1; jevaluateLGterm t.symbol.name="+t.symbol.name);
if (t.symbol.vari) {
var n=a[i].length;
var w;
if (n>0 && t.symbol.name==inverse(a[i].charAt(n-1)))
w=a[i].slice(0,n-1);
else
w=a[i]+t.symbol.name;
j=position1(a,w);
if (j!=a.length) return [[a,j]];
else return assignmentsList(a,i,w,t.symbol.name);
}
if (t.symbol==times) {
al=evaluateLGterm(t.arg[0],a,i);
bl=[];
for (var k=0; k=bl[n][1]) add(cl,bl[n]);
else add(cl,[bl[n][0],j1]);
}
}
return cl;
}
}
function isTermPositive(t) {
var al=evaluateLGterm(t,[""],0);
//document.write("\n
Number of diagrams checked = ",al.length);
// " al=",objToString(al));
for (var i=0; ial[i][1]) {
//document.write(", fails at ",objToString(al[i]));
return [false,al,i,t];
}
return [true,al,0,t];
}
function isTermIdentity(t) {
var al=evaluateLGterm(t,[""],0);
//document.write("\n
Number of diagrams checked = ",al.length);
for (var i=0; iCorrect, "+st+", 1 point.");
return score+1;
}
function wrong(win, score, st) {
win.document.write("Wrong, "+st+", -1 point.");
return score-1;
}
function comment(win, st) {
win.document.write(""+st+"");
}
function check(frm) { //analyse the radio buttons and output results
win=open("", "resultWindow", "height=450,width=750,menubar=yes,resizable=yes,scrollbars=yes");
win.document.open();
var score=0;
win.document.write("Quiz Results");
win.document.write(""+
"Results for your personalised Quiz 1
");
for (var i=0; i");
}
win.document.write(""+
"Your Score is "+score+"/"+inequations.length+"
");
if (score<1) comment(win,"Guessing will get you nowhere :-)");
else if (scoreClick the X in the top right '+
'hand corner to close this window');
win.document.write('Here are the lgroup diagrams '+
'for the above inequalities:');
for (var i=0; i"+(i+1)+". "+e2s(inequations[i])+""+
objToString(checkEquation(inequations[i])[1]));
}
win.document.write("");
win.document.close();
}