Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Learn more about F# at http://fsharp.org
- // See the 'F# Tutorial' project for more help.
- type instruction =
- | ADD
- | SUB
- | MUL
- | SQR
- | DIV
- | PUSH of float
- type stack = float list
- exception BLEDNY_PROGRAM of (instruction * stack)
- let intInstr (x, y) =
- match x, y with
- | ADD, a::b::ys -> (b + a) :: ys : stack
- | SUB, a::b::ys -> (b - a) :: ys
- | MUL, a::b::ys -> (b * a) :: ys
- | DIV, a::b::ys -> try
- (b / a) :: ys with
- | :? System.DivideByZeroException as a -> printfn "Dzielenie przez zero: %s" a.Message; ys;
- | SQR, a::ys -> (a * a) :: ys
- | PUSH x, ys -> x::ys
- | _, _ -> raise (BLEDNY_PROGRAM(x, y));
- let wypisz_instr = function
- | ( PUSH x) -> "PUSH " + System.Convert.ToString(x)
- | ( SQR ) -> " SQR "
- | ( ADD ) -> " ADD "
- | ( SUB ) -> " SUB "
- | ( MUL ) -> " MUL ";
- let intpProg(is) =
- let rec iPS = function
- | ([],x::xs) -> x
- | (i::is, xs) -> iPS(is, intInstr(i, xs))
- iPS(is, [])
- [<EntryPoint>]
- let main argv =
- //let i1 = PUSH 3.0;
- //let i2 = PUSH 4.0;
- //let i3 = SUB;
- //let i4 = PUSH 2.0;
- //let i5 = MUL;
- //let stos:stack = [];
- //let stos1 = try intInstr(SQR, stos) with BLEDNY_PROGRAM(a, b) ->
- // (
- // printf "Wyjątek: Błędne wykonanie programu\nOperand: %A, Stos: %A" a b;
- // b
- // );
- ////let stos2 = intInstr(ADD, stos1);
- //let stos1 = intInstr(i1, stos);
- //let stos2 = intInstr(i2, stos1);
- //let stos3 = intInstr(i3, stos2);
- //let stos4 = intInstr(i4, stos3);
- //let stos5 = intInstr(i5, stos4);
- let il1 = [PUSH 3.0; PUSH 0.0; DIV]
- let il2 = [PUSH 3.0; PUSH 4.0; ADD; PUSH 2.0];
- let il3 = [PUSH 3.0; PUSH 4.0; ADD; MUL];
- //let w = intpProg(il3)
- //printfn "%A" (wypisz_instr MUL)
- printfn "%A" (intpProg il1);
- 0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement