package function.builtin; import environment.RuntimeEnvironment; import function.ArgumentValidator; import function.FunctionNames; import function.LispFunction; import sexpression.Cons; import sexpression.SExpression; @FunctionNames({ "PRINT" }) public class PRINT extends LispFunction { private ArgumentValidator argumentValidator; private RuntimeEnvironment environment; public PRINT(String name) { this.argumentValidator = new ArgumentValidator(name); this.argumentValidator.setExactNumberOfArguments(1); this.environment = RuntimeEnvironment.INSTANCE; } @Override public SExpression call(Cons argumentList) { argumentValidator.validate(argumentList); SExpression argument = argumentList.getFirst(); environment.getOutput().println(argument); return argument; } }