rl_lang/interpreter/stdlib/math/
log.rs1use crate::{
2 interpreter::{evaluator::Evaluator, values::Value},
3 utils::{errors::Error, span::Span},
4};
5
6pub fn std_log(eval: &mut Evaluator, a: Value, base: Value, span: Span) -> Result<Value, Error> {
7 match (a, base) {
8 (Value::Integer(i), Value::Integer(base)) => Ok(Value::Float((i as f64).log(base as f64))),
9 (Value::Float(f), Value::Float(base)) => Ok(Value::Float(f.log(base))),
10 (Value::Float(f), Value::Integer(base)) => Ok(Value::Float(f.log(base as f64))),
11 (Value::Integer(i), Value::Float(base)) => Ok(Value::Float((i as f64).log(base))),
12
13 (a, base) => Err(eval.err(
14 format!(
15 "log() expects a number, got ({}, {})",
16 a.type_name(),
17 base.type_name()
18 ),
19 span,
20 )),
21 }
22}