ocaml: phase 5.1 rpn.ml baseline (Reverse Polish Notation evaluator, [3 4 + 2 * 5 -] = 9)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 25s

Stack-based RPN evaluator:

  let eval_rpn tokens =
    let stack = Stack.create () in
    List.iter (fun tok ->
      if tok is operator then
        let b = Stack.pop stack in
        let a = Stack.pop stack in
        Stack.push (apply tok a b) stack
      else
        Stack.push (int_of_string tok) stack
    ) tokens;
    Stack.pop stack

For tokens [3 4 + 2 * 5 -]:
  3 4 +  ->  7
  7 2 *  ->  14
  14 5 - ->  9

Exercises Stack.create / push / pop, mixed branch on string
equality, multi-arm if/else if for operator dispatch, int_of_string
for token parsing.

39 baseline programs total.
This commit is contained in:
2026-05-09 08:39:56 +00:00
parent 13fb1bd7a9
commit 095bb62ef9
3 changed files with 28 additions and 0 deletions

View File

@@ -31,6 +31,7 @@
"queens.ml": 2,
"quicksort.ml": 44,
"roman.ml": 44,
"rpn.ml": 9,
"safe_div.ml": 20,
"shuffle.ml": 55,
"word_freq.ml": 8,

20
lib/ocaml/baseline/rpn.ml Normal file
View File

@@ -0,0 +1,20 @@
let eval_rpn tokens =
let stack = Stack.create () in
List.iter (fun tok ->
if tok = "+" || tok = "-" || tok = "*" || tok = "/" then begin
let b = Stack.pop stack in
let a = Stack.pop stack in
let r = if tok = "+" then a + b
else if tok = "-" then a - b
else if tok = "*" then a * b
else a / b
in
Stack.push r stack
end else
Stack.push (int_of_string tok) stack
) tokens;
Stack.pop stack
;;
eval_rpn ["3"; "4"; "+"; "2"; "*"; "5"; "-"]