ksl 0.1.5

KSL core library and interpreter
Documentation
use crate::{Environment, eval::apply::eval_apply, value::Value};

pub(crate) fn builtin(args: &[Value], env: &Environment) -> Option<(Value, Environment)> {
    let mut local_env = env.clone();
    let mut final_result = Value::Unit;
    for arg in args.iter() {
        match eval_apply(arg, &local_env) {
            Some((result, new_env)) => {
                local_env.extend(new_env);
                final_result = result;
            }
            None => {
                eprintln!(
                    concat!(
                        "Error[ksl::builtin::block]: ",
                        "Cannot evaluate expression {:?}."
                    ),
                    arg
                );
                return None;
            }
        }
    }
    Some((final_result, Environment::new()))
}