public static Object Cond(Environment env, List objects) { Object result = Inert.Instance; objects.ForEach <Pair>(p => { Object test = env.Evaluate(p.Car); if (!(test is Boolean condition)) { throw new ArgumentException($"Test in {p.Car} is not a boolean."); } if (condition) { result = Sequence(env, (p.Cdr as Pair)); return(true); } return(false); }); return(result); }
public static Inert Define(Environment env, Object definiend, Object expr) { Match(env, definiend, env.Evaluate(expr)); return(Inert.Instance); }
public static Boolean Binds(Environment environment, Object expr, List symbols) => environment.Evaluate(expr) is Environment e?symbols.All <Symbol>(e.Contains) :