apply :: Operator -> Stack -> Stack
apply f (x:y:zs) = (f y x) : zs
opList
:: [(String, Operator
)]opList = [ ("+", (+)), ("-", (-))
, ("^", (^)) ]
runRPN [] (t:_) = t
runRPN (curr:rest) stk =
Just op -> runRPN rest $ apply op stk
Nothing
-> runRPN rest
$ (read curr
) : stk
aW1wb3J0IFN5c3RlbS5JTwoKdHlwZSBTdGFjayA9IFtJbnRlZ2VyXQp0eXBlIE9wZXJhdG9yID0gSW50ZWdlciAtPiBJbnRlZ2VyIC0+IEludGVnZXIKCmFwcGx5IDo6IE9wZXJhdG9yIC0+IFN0YWNrIC0+IFN0YWNrCmFwcGx5IGYgKHg6eTp6cykgPSAoZiB5IHgpIDogenMKCm9wTGlzdCA6OiBbKFN0cmluZywgT3BlcmF0b3IpXQpvcExpc3QgPSBbICgiKyIsICgrKSksICgiLSIsICgtKSkKICAgICAgICAgLCAoIioiLCAoKikpLCAoIi8iLCBkaXYpCiAgICAgICAgICwgKCJeIiwgKF4pKSBdCgpydW5SUE4gOjogW1N0cmluZ10gLT4gU3RhY2sgLT4gSW50ZWdlcgpydW5SUE4gW10gKHQ6XykgPSB0CnJ1blJQTiAoY3VycjpyZXN0KSBzdGsgPQogIGNhc2UgbG9va3VwIGN1cnIgb3BMaXN0IG9mCiAgICBKdXN0IG9wIC0+IHJ1blJQTiByZXN0ICQgYXBwbHkgb3Agc3RrCiAgICBOb3RoaW5nIC0+IHJ1blJQTiByZXN0ICQgKHJlYWQgY3VycikgOiBzdGsKCm1haW4gOjogSU8gKCkKbWFpbiA9IGludGVyYWN0ICQgdW5saW5lcyAuIG1hcCBmIC4gbGluZXMKICB3aGVyZSBmIHggPSBzaG93ICQgcnVuUlBOICh3b3JkcyB4KSBbXQ==