@@ -0,0 +1,1096 @@
+class Symbol(str):%0A    pass%0A%0A%0A# lists%0Aclass List(list):%0A    def __add__(self, rhs):%0A        return List(list.__add__(self, rhs))%0A%0A    def __getitem__(self, i):%0A        if type(i) == slice:%0A            return List(list.__getitem__(self, i))%0A        elif i %3E= len(self):%0A            return None%0A        else:%0A            return list.__getitem__(self, i)%0A%0A    def __getslice__(self, *a):%0A        return List(self.__getslice__(self, *a))%0A%0A    @classmethod%0A    def is_list(cls, obj):%0A        return isinstance(obj, cls)%0A%0A%0Aclass Boolean(object):%0A    def __init__(self, val):%0A        self.val = val%0A%0A    @classmethod%0A    def is_true(cls, exp):%0A        return isinstance(exp, cls) and bool(exp)%0A%0A    @classmethod%0A    def is_false(cls, exp):%0A        return isinstance(exp, cls) and not bool(exp)%0A%0A%0Aclass Nil(object):%0A    def __init__(self, val):%0A        self.val = val%0A%0A    @classmethod%0A    def is_nil(cls, exp):%0A        return isinstance(exp, cls)%0A%0A%0Aclass Atom(object):%0A    def __init__(self, val):%0A        self.val = val%0A%0A    @classmethod%0A    def is_atom(cls, exp):%0A        return isinstance(exp, Atom)%0A

Create Symbol, List, Boolean, Nil and Atom types.