15 lines
533 B
Racket
15 lines
533 B
Racket
#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)))])))
|