fn main() {
let mut stack = vec![];
stack.push(42);
stack.push(36);
add(&mut stack);
println!("stack: {stack:?}");
}
fn add(stack: &mut Vec<i32>){
let lhs = stack.pop().unwrap();
let rhs = stack.pop().unwrap();
stack.push(lhs + rhs);
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.23s
Running `target/debug/stackmachine`
stack: [78]
### 標準入力からの読み込み
fn main() {
for line in std::io::stdin().lines() {
if let Ok(line) = line {
let words: Vec<_> = line.split(" ").collect();
println!("Line: {words:?}");
}
}
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.82s
Running `target/debug/stackmachine`
42 3 +
Line: [“42”, “3”, “+”]
### 文字列のパースと実行
fn main() {
for line in std::io::stdin().lines() {
let mut stack = vec![];
if let Ok(line) = line {
let words: Vec<_> = line.split(" ").collect();
for word in words {
if let Ok(parsed) = word.parse::<i32>() {
stack.push(parsed);
} else {
match word {
"+" => add(&mut stack),
_ => panic!("{word:?} could not be parsed"),
}
}
}
println!("stadk: {stack:?}");
}
}
}
fn add(stack: &mut Vec<i32>){
let lhs = stack.pop().unwrap();
let rhs = stack.pop().unwrap();
stack.push(lhs + rhs);
}
### 四則演算
fn main() {
for line in std::io::stdin().lines() {
let mut stack = vec![];
if let Ok(line) = line {
let words: Vec<_> = line.split(" ").collect();
for word in words {
if let Ok(parsed) = word.parse::<i32>() {
stack.push(parsed);
} else {
match word {
"+" => add(&mut stack),
"-" => sub(&mut stack),
"*" => mul(&mut stack),
"/" => div(&mut stack),
_ => panic!("{word:?} could not be parsed"),
}
}
}
println!("stadk: {stack:?}");
}
}
}
fn add(stack: &mut Vec<i32>){
let rhs = stack.pop().unwrap();
let lhs = stack.pop().unwrap();
stack.push(lhs + rhs);
}
fn sub(stack: &mut Vec<i32>){
let rhs = stack.pop().unwrap();
let lhs = stack.pop().unwrap();
stack.push(lhs - rhs);
}
fn mul(stack: &mut Vec<i32>){
let rhs = stack.pop().unwrap();
let lhs = stack.pop().unwrap();
stack.push(lhs * rhs);
}
fn div(stack: &mut Vec<i32>){
let rhs = stack.pop().unwrap();
let lhs = stack.pop().unwrap();
stack.push(lhs / rhs);
}