// Path: src/main/java/net/liujiacai/jcscheme/util/JCConstants.java
// public class JCConstants {
// 		
// 	public static final String START_TOKEN = "(";
// 	public static final String END_TOKEN = ")";
// 
//     // bool functions
//     public static final String AND = "and";
//     public static final String OR = "or";
//     public static final String NOT = "not";
// 
//     // number functions
// 	public static final String ADD = "+";
// 	public static final String SUB = "-";
// 	public static final String MUL = "*";
// 	public static final String DIV = "/";
//     public static final String GT = ">";
//     public static final String LT = "<";
//     public static final String EQ = "=";
//     // pair functions
//     public static final String CONS = "cons";
//     public static final String CAR = "car";
// 	public static final String CDR = "cdr";
// 	public static final String LIST = "list";
// 	public static final String NULL = "null?";
//     // string functions
// 	public static final String STR_EQ = "str=?";
// 
//     // builtin helper functions
//     public static final String PRINT = "print";
// 
// 	// builtin keywords
// 	public static final String DEF = "def";
// 	public static final String IF = "if";
// 	public static final String LAMBDA = "lambda";
// 
// 	// builtin literals
// 	public static final String NIL = "nil";
// 	public static final String TRUE = "true";
// 	public static final String FALSE = "false";
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/exception/WrongNumberArgsException.java
// public class WrongNumberArgsException extends Exception {
// 
//     private String methodName;
//     private int expected;
//     private int actual;
// 
//     public WrongNumberArgsException(String methodName, int actual, int expected) {
//         this.methodName = methodName;
//         this.actual = actual;
//         this.expected = expected;
// 
//     }
// 
//     @Override
//     public String toString() {
//         return methodName + " need " + actual + " params, but passed in " + expected;
//     }
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/type/JCBool.java
// public class JCBool extends JCObject {
//     private static JCBool trueVal = new JCBool(true);
//     private static JCBool falseVal = new JCBool(false);
//     private boolean value;
// 
//     private JCBool(boolean value) {
//         this.value = value;
//     }
// 
//     public static JCBool getInstance(boolean bool) {
//         if (bool) {
//             return trueVal;
//         } else {
//             return falseVal;
//         }
//     }
// 
//     public boolean getValue() {
//         return value;
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf(value);
//     }
// 
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/type/JCList.java
// public class JCList extends JCPair {
// 
//     private static final JCList NIL = new JCList(null, null);
//     public  static JCList getNullList() {
//         return NIL;
//     }
// 
//     public JCList(JCObject first, JCObject second) {
//         super(first, second);
//     }
// 
//     @Override
//     public String toString() {
//         JCObject first = this.getFirst();
//         StringBuffer buffer;
//         if (first == null) {
//             buffer = new StringBuffer("(");
//         } else {
//             buffer = new StringBuffer("(" + first);
//         }
// 
//         JCPair rest = (JCPair) this.getSecond();
//         while (rest != null && rest.getFirst() != null) {
//             buffer.append(", " + rest.getFirst().toString());
//             rest = (JCPair) rest.getSecond();
//         }
//         buffer.append(")");
//         return buffer.toString();
//     }
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/type/JCObject.java
// public abstract class JCObject {
// 
// }


import net.liujiacai.jcscheme.util.JCConstants;
import net.liujiacai.jcscheme.exception.WrongNumberArgsException;
import net.liujiacai.jcscheme.type.JCBool;
import net.liujiacai.jcscheme.type.JCList;
import net.liujiacai.jcscheme.type.JCObject;
package net.liujiacai.jcscheme.builtin;


public class JCListFuncs {

    public static JCBool isNull(JCObject... args) {
        if (args.length != 1) {
            try {
// Path: src/main/java/net/liujiacai/jcscheme/util/JCConstants.java
// public class JCConstants {
// 		
// 	public static final String START_TOKEN = "(";
// 	public static final String END_TOKEN = ")";
// 
//     // bool functions
//     public static final String AND = "and";
//     public static final String OR = "or";
//     public static final String NOT = "not";
// 
//     // number functions
// 	public static final String ADD = "+";
// 	public static final String SUB = "-";
// 	public static final String MUL = "*";
// 	public static final String DIV = "/";
//     public static final String GT = ">";
//     public static final String LT = "<";
//     public static final String EQ = "=";
//     // pair functions
//     public static final String CONS = "cons";
//     public static final String CAR = "car";
// 	public static final String CDR = "cdr";
// 	public static final String LIST = "list";
// 	public static final String NULL = "null?";
//     // string functions
// 	public static final String STR_EQ = "str=?";
// 
//     // builtin helper functions
//     public static final String PRINT = "print";
// 
// 	// builtin keywords
// 	public static final String DEF = "def";
// 	public static final String IF = "if";
// 	public static final String LAMBDA = "lambda";
// 
// 	// builtin literals
// 	public static final String NIL = "nil";
// 	public static final String TRUE = "true";
// 	public static final String FALSE = "false";
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/exception/WrongNumberArgsException.java
// public class WrongNumberArgsException extends Exception {
// 
//     private String methodName;
//     private int expected;
//     private int actual;
// 
//     public WrongNumberArgsException(String methodName, int actual, int expected) {
//         this.methodName = methodName;
//         this.actual = actual;
//         this.expected = expected;
// 
//     }
// 
//     @Override
//     public String toString() {
//         return methodName + " need " + actual + " params, but passed in " + expected;
//     }
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/type/JCBool.java
// public class JCBool extends JCObject {
//     private static JCBool trueVal = new JCBool(true);
//     private static JCBool falseVal = new JCBool(false);
//     private boolean value;
// 
//     private JCBool(boolean value) {
//         this.value = value;
//     }
// 
//     public static JCBool getInstance(boolean bool) {
//         if (bool) {
//             return trueVal;
//         } else {
//             return falseVal;
//         }
//     }
// 
//     public boolean getValue() {
//         return value;
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf(value);
//     }
// 
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/type/JCList.java
// public class JCList extends JCPair {
// 
//     private static final JCList NIL = new JCList(null, null);
//     public  static JCList getNullList() {
//         return NIL;
//     }
// 
//     public JCList(JCObject first, JCObject second) {
//         super(first, second);
//     }
// 
//     @Override
//     public String toString() {
//         JCObject first = this.getFirst();
//         StringBuffer buffer;
//         if (first == null) {
//             buffer = new StringBuffer("(");
//         } else {
//             buffer = new StringBuffer("(" + first);
//         }
// 
//         JCPair rest = (JCPair) this.getSecond();
//         while (rest != null && rest.getFirst() != null) {
//             buffer.append(", " + rest.getFirst().toString());
//             rest = (JCPair) rest.getSecond();
//         }
//         buffer.append(")");
//         return buffer.toString();
//     }
// }
// 
// Path: src/main/java/net/liujiacai/jcscheme/type/JCObject.java
// public abstract class JCObject {
// 
// }


// Path: src/main/java/net/liujiacai/jcscheme/builtin/JCListFuncs.java
import net.liujiacai.jcscheme.util.JCConstants;
import net.liujiacai.jcscheme.exception.WrongNumberArgsException;
import net.liujiacai.jcscheme.type.JCBool;
import net.liujiacai.jcscheme.type.JCList;
import net.liujiacai.jcscheme.type.JCObject;

package net.liujiacai.jcscheme.builtin;


public class JCListFuncs {

    public static JCBool isNull(JCObject... args) {
        if (args.length != 1) {
            try {
                throw new WrongNumberArgsException(JCConstants.NULL, 1, args.length);