Example #1
0
        private void AddDefinition(Frame environment, List<string> paramNames, Dictionary<string, Procedure> bindings, Expression definition)
        {
            if (definition != null)
            {
                string name = definition.GetFirst().ToString();
                paramNames.Add(name);

                if (definition.GetRest().Count == 0)
                {
                    throw new Exception("Let: expression missing for " + name);
                }

                //TODO clean up the constructor and property
                Frame valueEnv = new Frame(new Dictionary<string, Procedure>(0), environment, null, new Identity(environment, null), false, "let-value");

                object value = valueEnv.Evaluate(definition.GetRest()[0],true);
                if (value is Procedure)
                {
                    bindings.Add(name, (Procedure)value);
                }
                else
                {
                    bindings.Add(name, new Identity(environment, value));
                }
            }
        }