A simple Calculator in LISP#
General Information
Author: Datasoft
Language: LISP
Compiler/Interpreter: InterLisp/65
(CALC PUSH POP BINARY UNARY - E N L S D P) (DEFINEQ CALC '(LAMBDA NIL (PROG (X Y OP STACK) LOOP (POKE 128 0) (TERPRI) (PRINT STACK) (TERPRI) (PRIN1 (QUOTE "Enter> ")) (SETQ IN (READ)) (COND ((# IN) (PUSH IN)) ((MEMBER IN BINARY) (PUSH (APPLY* IN (POP) (POP)))) ((MEMBER IN UNARY) (PUSH (APPLY* IN (POP)))) ((EQ IN (QUOTE Q)) (RETURN)) (T (PRIN1 (QUOTE "}")))) (GO LOOP))) ) (DEFINEQ PUSH '(LAMBDA (ITEM) (SETQ STACK (CONS ITEM STACK))) ) (DEFINEQ POP '(LAMBDA NIL (PROG (X) (SETQ X (CAR STACK)) (SETQ STACK (CDR STACK)) X)) ) (SETQ BINARY '(+ * - / P) ) (SETQ UNARY '(E L N D S) ) (DEFINEQ - '(LAMBDA (X Y) (SUB X Y)) ) (DEFINEQ E '(LAMBDA (X) (EXP X)) ) (DEFINEQ N '(LAMBDA (X) (SUB 0 X)) ) (DEFINEQ L '(LAMBDA (X) (LOG X)) ) (DEFINEQ S '(LAMBDA (X) (EXP (/ (LOG X) 2))) ) (DEFINEQ D '(LAMBDA (X) (PROGN (PUSH X) X)) ) (DEFINEQ P '(LAMBDA (X Y) (EXP (* Y (LOG X)))) ) NIL