rendered paste bodydatatype instruction = ADD
| SUB
| MUL
| ^^
| WR
| RD
| PUSH of real;
type stack = real list;
exception zlainstruc;
fun intInstr ( ADD , x::y::xs) = (x+y)::xs
| intInstr ( MUL , x::y::xs) = (x*y)::xs
| intInstr ( ^^ , x::xs) = (x*x)::xs
| intInstr ( PUSH a,xs) = a::xs
| intInstr ( SUB , x::y::xs) = (x-y)::xs
| intInstr ( _ ,xs) = raise zlainstruc;
val i1 = PUSH 3.0;
val i2 = PUSH 4.0;
val i3 = ADD;
val stos = []:stack;
val stos1= intInstr(i1,stos);
val stos2= intInstr(i2,stos1);
val stos3= intInstr(i3,stos2);
val i1 = PUSH 3.0;
val i2 = PUSH 4.0;
val i3 = ADD;
val i4 = PUSH 2.0;
val stos = []:stack;
val stos1= intInstr(i1,stos);
val stos2= intInstr(i2,stos1);
val stos3= intInstr(i3,stos2);
val stos4= intInstr(i4,stos3);
val stos5= intInstr(MUL,stos4);
val stos = intInstr(PUSH 2.0,stos);
val stos = intInstr(PUSH 3.0,stos);
val stos = intInstr(PUSH 4.0,stos);
val stos = intInstr(ADD,stos);
val stos = intInstr(MUL,stos);
val stos = []:stack;
val stos1 = intInstr (PUSH 3.0 ,stos) ;
(*val stos2 = intInstr (ADD,stos);*)
val rejestr :real = 0.0;
exception BLedny_Program of instruction * stack;
fun intInstr ( ADD , x::y::xs, rejX:real) = ((x+y)::xs,rejX)
| intInstr ( MUL , x::y::xs, rejX) = ((x*y)::xs,rejX)
| intInstr ( ^^ , x::xs,rejX) = ((x*x)::xs,rejX)
| intInstr ( WR , x::xs,rejX) = (xs,x)
| intInstr ( RD , xs,rejX) = (rejX::xs,rejX)
| intInstr ( PUSH a,xs,rejX) = (a::xs,rejX)
| intInstr ( SUB , x::y::xs,rejX) = ((x-y)::xs,rejX)
| intInstr ( instrukcja,stos ,rejX ) = raise BLedny_Program(instrukcja,stos);
exception zle;
fun intpProg (il) =
let
fun IPS([],(x::xs,rejestr)) = (x,rejestr)
| IPS(x::is,(xs,rejestr)) = IPS(is,intInstr(x,xs,rejestr))
| IPS([],([],_)) = raise zle
in
IPS(il,([],rejestr))
end;
val il1 = [PUSH 2.0,PUSH 3.0,ADD,WR,PUSH 4.0 ,PUSH 2.0, PUSH 3.0,ADD,MUL,RD,ADD ];
intpProg(il1);