; CALC CALCULATES THE VALUE OF A FULLY PARENTHESIZED EXPRESSION ; IN INFIX. AN EXPRESSION IS ; 1) AN ATOM WHICH IS EVALUATED ; 2) A LIST OF A SINGLE ELEMENT. THE SINGLE ELEMENT IS EVALUATED ; 3) A LIST OF 3 ELEMENTS. THE MIDDLE ELEMENT MUST BE AN OPERATOR ; +, -, * OR /. THE FIRST AND THIRD ELEMENT ARE EXPRESSIONS (DEFINE CALC , (LAMBDA (EXP) , , (COND , , , ((ATOM EXP) (EVAL EXP)) , , , ((NULL (CDR EXP)) (EVAL (CAR EXP))) , , , ((EQ (CADR EXP) '+) , , , , (PLUS (CALC (CAR EXP)) (CALC (CADDR EXP))) , , , ,,,) , , , ((EQ (CADR EXP) '*) , , , , (TIMES (CALC (CAR EXP)) (CALC (CADDR EXP))) , , , ,,,) , , , ((EQ (CADR EXP) '-) , , , , (DIFFERENCE (CALC (CAR EXP)) (CALC (CADDR EXP))) , , , ,,,) , , , ((EQ (CADR EXP) '/) , , , , (QUOTIENT (CALC (CAR EXP)) (CALC (CADDR EXP))) , , , ,,,) , , ,,,) , ,,,) ,,,) ; PAREN TAKES A LIST OF THE FORM ; (A + B * C - D) ; AND FULLY PARENETHIZES IT. * AND / HAVE EQUAL PRIORITY WHICH IS ; GREATER THAN + AND - (ALSO EQUAL) (DEFINE PAREN , (LAMBDA (SENT) , , (PROG (P) , , , (COND , , , , ((ATOM SENT) (RETURN SENT)) , , , , ((SETQ P (PREFIX SENT '+ '-)) , , , , , (RETURN (LIST (PAREN (CADR P)) (CAR P) (PAREN (CADDR P)))) , , , , ,,,) , , , , ((SETQ P (PREFIX SENT '* '/)) , , , , , (RETURN (LIST (PAREN (CADR P)) (CAR P) (PAREN (CADDR P)))) , , , , ,,,) , , , ,,,) , , , (RETURN SENT) , , ,,,) , ,,,) ,,,) ; PREFIX TAKES AN EXPRESSION AN A SET OF TWO OPERATORS. IT FINDS ; THE FIRST OCCURANCE OF EITHER OPERATOR AND REBUILDS THE EXPRESSION ; INTO A 3 ELEMENT LIST. THE OPERATOR FOUND IS THE FIRST ELEMENT. ; ALL THAT PRECEDED THE OPERATOR BECOMES THE 2ND ELEMENT. ALL THAT ; FOLLOWED THE OPERATOR BECOMES THE THIRD ELEMENT (DEFINE PREFIX , (LAMBDA (EXPRS T1 T2) , , (PROG (P F) , , , (SETQ P EXPRS) , , , (REPEAT , , , , UNTIL (NULL P) , , , , UNTIL (EQ (CAR P) T1) , , , , UNTIL (EQ (CAR P) T2) , , , , (SETQ F (CONS (CAR P) F)) , , , , (SETQ P (CDR P)) , , , ,,,) , , , (COND , , , , (P (RETURN (LIST (CAR P) (REVERSE F) (CDR P)))) , , , ,,,) , , ,,,) , ,,,) ,,,)