use yufmath::core::{Expression, Number, MathConstant};
use std::collections::HashMap;
fn main() {
println!("=== Yufmath 基础函数支持演示 ===\n");
println!("1. 三角函数:");
let sin_0 = Expression::function("sin", vec![Expression::Number(Number::integer(0))]);
println!("sin(0) = {}", sin_0.evaluate_exact().unwrap());
let cos_0 = Expression::function("cos", vec![Expression::Number(Number::integer(0))]);
println!("cos(0) = {}", cos_0.evaluate_exact().unwrap());
let sin_pi = Expression::function("sin", vec![Expression::Constant(MathConstant::Pi)]);
println!("sin(π) = {}", sin_pi.evaluate_exact().unwrap());
let cos_pi = Expression::function("cos", vec![Expression::Constant(MathConstant::Pi)]);
println!("cos(π) = {}", cos_pi.evaluate_exact().unwrap());
let pi_half = Expression::BinaryOp {
op: yufmath::core::BinaryOperator::Divide,
left: Box::new(Expression::Constant(MathConstant::Pi)),
right: Box::new(Expression::Number(Number::integer(2))),
};
let sin_pi_half = Expression::function("sin", vec![pi_half.clone()]);
println!("sin(π/2) = {}", sin_pi_half.evaluate_exact().unwrap());
let cos_pi_half = Expression::function("cos", vec![pi_half]);
println!("cos(π/2) = {}", cos_pi_half.evaluate_exact().unwrap());
let pi_quarter = Expression::BinaryOp {
op: yufmath::core::BinaryOperator::Divide,
left: Box::new(Expression::Constant(MathConstant::Pi)),
right: Box::new(Expression::Number(Number::integer(4))),
};
let tan_pi_quarter = Expression::function("tan", vec![pi_quarter]);
println!("tan(π/4) = {}", tan_pi_quarter.evaluate_exact().unwrap());
println!();
println!("2. 指数和对数函数:");
let exp_0 = Expression::function("exp", vec![Expression::Number(Number::integer(0))]);
println!("exp(0) = {}", exp_0.evaluate_exact().unwrap());
let exp_1 = Expression::function("exp", vec![Expression::Number(Number::integer(1))]);
println!("exp(1) = {}", exp_1.evaluate_exact().unwrap());
let i_pi = Expression::BinaryOp {
op: yufmath::core::BinaryOperator::Multiply,
left: Box::new(Expression::Constant(MathConstant::I)),
right: Box::new(Expression::Constant(MathConstant::Pi)),
};
let exp_i_pi = Expression::function("exp", vec![i_pi]);
println!("exp(i*π) = {}", exp_i_pi.evaluate_exact().unwrap());
let ln_1 = Expression::function("ln", vec![Expression::Number(Number::integer(1))]);
println!("ln(1) = {}", ln_1.evaluate_exact().unwrap());
let ln_e = Expression::function("ln", vec![Expression::Constant(MathConstant::E)]);
println!("ln(e) = {}", ln_e.evaluate_exact().unwrap());
let log10_10 = Expression::function("log10", vec![Expression::Number(Number::integer(10))]);
println!("log10(10) = {}", log10_10.evaluate_exact().unwrap());
println!();
println!("3. 平方根和幂函数:");
let sqrt_4 = Expression::function("sqrt", vec![Expression::Number(Number::integer(4))]);
println!("sqrt(4) = {}", sqrt_4.evaluate_exact().unwrap());
let sqrt_9 = Expression::function("sqrt", vec![Expression::Number(Number::integer(9))]);
println!("sqrt(9) = {}", sqrt_9.evaluate_exact().unwrap());
let pow_2_3 = Expression::function("pow", vec![
Expression::Number(Number::integer(2)),
Expression::Number(Number::integer(3))
]);
println!("pow(2, 3) = {}", pow_2_3.evaluate_exact().unwrap());
let pow_3_2 = Expression::function("pow", vec![
Expression::Number(Number::integer(3)),
Expression::Number(Number::integer(2))
]);
println!("pow(3, 2) = {}", pow_3_2.evaluate_exact().unwrap());
println!();
println!("4. 双曲函数:");
let sinh_0 = Expression::function("sinh", vec![Expression::Number(Number::integer(0))]);
println!("sinh(0) = {}", sinh_0.evaluate_exact().unwrap());
let cosh_0 = Expression::function("cosh", vec![Expression::Number(Number::integer(0))]);
println!("cosh(0) = {}", cosh_0.evaluate_exact().unwrap());
let tanh_0 = Expression::function("tanh", vec![Expression::Number(Number::integer(0))]);
println!("tanh(0) = {}", tanh_0.evaluate_exact().unwrap());
println!();
println!("5. 包含变量的函数:");
let mut vars = HashMap::new();
vars.insert("x".to_string(), Number::integer(0));
let sin_x = Expression::function("sin", vec![Expression::variable("x")]);
println!("sin(x) where x = 0: {}", sin_x.evaluate(&vars).unwrap());
let cos_x = Expression::function("cos", vec![Expression::variable("x")]);
println!("cos(x) where x = 0: {}", cos_x.evaluate(&vars).unwrap());
vars.insert("x".to_string(), Number::integer(1));
let exp_x = Expression::function("exp", vec![Expression::variable("x")]);
println!("exp(x) where x = 1: {}", exp_x.evaluate(&vars).unwrap());
println!();
println!("6. 符号结果(无法精确计算的情况):");
let sin_2 = Expression::function("sin", vec![Expression::Number(Number::integer(2))]);
println!("sin(2) = {}", sin_2.evaluate_exact().unwrap());
let exp_2 = Expression::function("exp", vec![Expression::Number(Number::integer(2))]);
println!("exp(2) = {}", exp_2.evaluate_exact().unwrap());
let ln_2 = Expression::function("ln", vec![Expression::Number(Number::integer(2))]);
println!("ln(2) = {}", ln_2.evaluate_exact().unwrap());
let sqrt_2 = Expression::function("sqrt", vec![Expression::Number(Number::integer(2))]);
println!("sqrt(2) = {}", sqrt_2.evaluate_exact().unwrap());
println!();
println!("7. 嵌套函数:");
let nested_func = Expression::function("sin", vec![
Expression::function("cos", vec![Expression::Number(Number::integer(0))])
]);
println!("sin(cos(0)) = {}", nested_func.evaluate_exact().unwrap());
let exp_ln_5 = Expression::function("exp", vec![
Expression::function("ln", vec![Expression::Number(Number::integer(5))])
]);
println!("exp(ln(5)) = {}", exp_ln_5.evaluate_exact().unwrap());
println!("\n=== 演示完成 ===");
}