예제 #1
0
        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);
        }
예제 #2
0
 public static Inert Define(Environment env, Object definiend, Object expr)
 {
     Match(env, definiend, env.Evaluate(expr));
     return(Inert.Instance);
 }
예제 #3
0
 public static Boolean Binds(Environment environment, Object expr, List symbols)
 => environment.Evaluate(expr) is Environment e?symbols.All <Symbol>(e.Contains) :