rpn(1): added modulo
This commit is contained in:
parent
5debb9d954
commit
5f8e90b592
33
src/rpn.rs
33
src/rpn.rs
@ -50,7 +50,7 @@ use std::{
|
||||
process::ExitCode,
|
||||
};
|
||||
|
||||
use CalcType::{ Add, Divide, Multiply, Power, Subtract, Val };
|
||||
use CalcType::{ Add, Divide, Modulo, Multiply, Power, Subtract, Val };
|
||||
|
||||
extern crate sysexits;
|
||||
|
||||
@ -64,6 +64,7 @@ enum CalcType {
|
||||
Multiply,
|
||||
Divide,
|
||||
Power,
|
||||
Modulo,
|
||||
Val(f64),
|
||||
}
|
||||
|
||||
@ -100,6 +101,7 @@ fn str_to_calc_type(string: &str) -> Option<CalcType> {
|
||||
"*" => Some(Multiply),
|
||||
"/" => Some(Divide),
|
||||
"^" => Some(Power),
|
||||
"%" => Some(Modulo),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@ -130,15 +132,16 @@ fn eval(
|
||||
};
|
||||
|
||||
match x {
|
||||
Add | Divide | Multiply | Power | Subtract => ops.push_back(x),
|
||||
|
||||
Add | Divide | Multiply | Power | Subtract | Modulo => {
|
||||
ops.push_back(x)
|
||||
},
|
||||
Val(x_) => stack.push_back(x_),
|
||||
}
|
||||
}
|
||||
|
||||
for op in &ops {
|
||||
match op {
|
||||
Add | Subtract | Multiply | Divide | Power => {
|
||||
Add | Subtract | Multiply | Divide | Power | Modulo => {
|
||||
let x = &stack.pop_back().ok_or(EvaluationError {
|
||||
message: "Stack is empty.".to_string(),
|
||||
})?;
|
||||
@ -148,22 +151,12 @@ fn eval(
|
||||
})?;
|
||||
|
||||
match op {
|
||||
Add => {
|
||||
&stack.push_back(y + x)
|
||||
},
|
||||
Subtract => {
|
||||
&stack.push_back(y - x)
|
||||
},
|
||||
Multiply => {
|
||||
&stack.push_back(y * x)
|
||||
},
|
||||
Divide => {
|
||||
&stack.push_back(y / x)
|
||||
},
|
||||
Power => {
|
||||
let result = x.powf(*y);
|
||||
&stack.push_back(result)
|
||||
},
|
||||
Add => &stack.push_back(y + x),
|
||||
Subtract => &stack.push_back(y - x),
|
||||
Multiply => &stack.push_back(y * x),
|
||||
Divide => &stack.push_back(y / x),
|
||||
Power => &stack.push_back(x.powf(*y)),
|
||||
Modulo => &stack.push_back(y % x),
|
||||
_ => &{},
|
||||
};
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user