#![allow(clippy::print_stdout)] #![allow(clippy::uninlined_format_args)]
use ruchy::runtime::Repl;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🎯 Ruchy Function Call Examples");
println!("{}", "=".repeat(50));
let mut repl = Repl::new(std::env::temp_dir())?;
basic_println_examples(&mut repl)?;
variable_examples(&mut repl)?;
expression_examples(&mut repl)?;
formatting_examples(&mut repl)?;
print_vs_println_examples(&mut repl)?;
control_flow_examples(&mut repl)?;
error_handling_examples(&mut repl);
println!("\n🎉 Function call examples completed!");
println!("All function calls returned unit type '()' as expected.");
Ok(())
}
fn basic_println_examples(repl: &mut Repl) -> Result<(), Box<dyn std::error::Error>> {
println!("\n📝 Basic println Examples:");
println!("1. Simple string:");
repl.eval(r#"println("Hello, World!")"#)?;
println!("2. Multiple arguments:");
repl.eval(r#"println("Hello", "World", "!")"#)?;
println!("3. Different types:");
repl.eval("println(42, 3.14, true, \"mixed\")")?;
Ok(())
}
fn variable_examples(repl: &mut Repl) -> Result<(), Box<dyn std::error::Error>> {
println!("\n🔗 Variables in Function Calls:");
repl.eval("let name = \"Alice\"")?;
repl.eval("let age = 30")?;
repl.eval("let score = 95.5")?;
println!("4. Variables as arguments:");
repl.eval(r#"println("Name:", name, "Age:", age, "Score:", score)"#)?;
Ok(())
}
fn expression_examples(repl: &mut Repl) -> Result<(), Box<dyn std::error::Error>> {
println!("\n🧮 Expressions in Function Calls:");
println!("5. Arithmetic expressions:");
repl.eval("println(\"Sum:\", 10 + 20)")?;
repl.eval("println(\"Product:\", 6 * 7)")?;
println!("6. Complex expressions:");
repl.eval("println(\"Result:\", (5 + 3) * 2 - 1)")?;
Ok(())
}
fn formatting_examples(repl: &mut Repl) -> Result<(), Box<dyn std::error::Error>> {
println!("\n📋 String Formatting Patterns:");
println!("7. Formatted output:");
repl.eval("let x = 42")?;
repl.eval("let y = 58")?;
repl.eval(r#"println("x =", x, ", y =", y, ", x + y =", x + y)"#)?;
Ok(())
}
fn print_vs_println_examples(repl: &mut Repl) -> Result<(), Box<dyn std::error::Error>> {
println!("\n🖨️ Print vs Println:");
println!("8. Print without newline:");
repl.eval(r#"print("A")"#)?;
repl.eval(r#"print("B")"#)?;
repl.eval(r#"println("C")"#)?;
println!("9. Building output incrementally:");
repl.eval(r#"print("Result: ")"#)?;
repl.eval("print(2 + 2)")?;
repl.eval(r#"println(" (calculated)")"#)?;
Ok(())
}
fn control_flow_examples(repl: &mut Repl) -> Result<(), Box<dyn std::error::Error>> {
println!("\n🔄 Function Calls in Control Flow:");
println!("10. Function calls in if expressions:");
repl.eval(r#"if true { println("True branch") } else { println("False branch") }"#)?;
println!("11. Function calls with boolean logic:");
repl.eval("let debug = true")?;
repl.eval(r#"if debug { println("Debug: Variables loaded successfully") }"#)?;
Ok(())
}
fn error_handling_examples(repl: &mut Repl) {
println!("\n⚠️ Error Handling:");
println!("12. Unknown function (should error):");
match repl.eval("unknown_function()") {
Ok(_) => println!(" Unexpected success!"),
Err(e) => println!(" ✅ Correctly errored: {e}"),
}
}