#lang racket (define (calculate-RPN expr) (for/fold ([stack '()]) ([token expr]) (printf "~a\t -> ~a~N" token stack) (match* (token stack) [((? number? n) s) (cons n s)] [('+ (list x y s ___)) (cons (+ x y) s)] [('- (list x y s ___)) (cons (- y x) s)] [('* (list x y s ___)) (cons (* x y) s)] [('/ (list x y s ___)) (cons (/ y x) s)] [('^ (list x y s ___)) (cons (expt y x) s)] [(x s) (error "calculate-RPN: Cannot calculate the expression:" (reverse (cons x s)))])))