diff --git a/src/function/builtin/special/QUOTE.java b/src/function/builtin/special/QUOTE.java index c1533d4..eac3077 100644 --- a/src/function/builtin/special/QUOTE.java +++ b/src/function/builtin/special/QUOTE.java @@ -1,41 +1,23 @@ package function.builtin.special; -import function.LispFunction; -import function.builtin.cons.LENGTH; +import function.*; import sexpression.*; -/** - * QUOTE represents the QUOTE form in Lisp. - */ public class QUOTE extends LispFunction { - // The number of arguments that QUOTE takes. - private static final int NUM_ARGS = 1; + private ArgumentValidator argumentValidator; - public SExpression call(Cons argList) { - // retrieve the number of arguments passed to QUOTE - int argListLength = LENGTH.getLength(argList); - - // make sure we have received exactly one argument - if (argListLength != NUM_ARGS) { - Cons originalSExpr = new Cons(new Symbol("QUOTE"), argList); - String errMsg = "too " + - ((argListLength > NUM_ARGS) ? "many" : "few") + - " arguments given to QUOTE: " + originalSExpr; - - throw new RuntimeException(errMsg); - } - - return argList.getCar(); + public QUOTE() { + this.argumentValidator = new ArgumentValidator("QUOTE"); + this.argumentValidator.setExactNumberOfArguments(1); + } + + public SExpression call(Cons argumentList) { + argumentValidator.validate(argumentList); + + return argumentList.getCar(); } - /** - * Determine if the arguments passed to this Lisp function should be - * evaluated. - * - * @return - * false - */ public boolean evaluateArguments() { return false; }