void appendToScope(_scope* s, perameterDefenition perameter, expressionToDelegate e){ if(perameter.func){ s.add(perameter.name, unbox!(procedure)(e.evaluate())); } else if(perameter.eager){ boxToDelegate* returnValue = new boxToDelegate; returnValue.value = e.evaluate(); s.add(perameter.name, &returnValue.execute); } //lazy else s.add(perameter.name, cast(procedure)&e.evaluate); } Box define(expressionToDelegate[] operands){ if(operands.length != 2) throw new Exception("Define should only have two operands"); perameterDefenition perameter = unbox!(perameterDefenition)(operands[0].evaluate()); /* if(perameter.func){ operands[0].parentScope.add(perameter.name, unbox!(procedure)(operands[1].evaluate())); } else if(perameter.eager){ boxToDelegate* returnValue = new boxToDelegate; returnValue.value = operands[1].evaluate(); operands[0].parentScope.add(perameter.name, &returnValue.execute); } //lazy else operands[0].parentScope.add(perameter.name, cast(procedure)&operands[1].evaluate); */ appendToScope(operands[0].parentScope, perameter, operands[1]); //good return value? return box(perameter.name); }