package function.builtin; import function.LispFunction; import sexpression.*; /** * PRINT represents the PRINT function in Lisp. */ public class PRINT extends LispFunction { // The number of arguments that PRINT takes. private static final int NUM_ARGS = 1; public SExpression call(Cons argList) { // retrieve the number of arguments passed to PRINT int argListLength = LENGTH.getLength(argList); // make sure we have received the proper number of arguments if (argListLength != NUM_ARGS) { Cons originalSExpr = new Cons(new Symbol("PRINT"), argList); String errMsg = "too " + ((argListLength > NUM_ARGS) ? "many" : "few") + " arguments given to PRINT: " + originalSExpr; throw new RuntimeException(errMsg); } SExpression arg = argList.getCar(); System.out.println(arg); return arg; } }