Classes are a way of writing higher order functions
&gt; <i>Yup, really. Classes are just higher order functions, which accept arguments (constructor) and return a list of functions that can manipulate those arguments (methods).</i><p>Nope, really they are not. Rather, objects are <i>run-time</i>, <i>publicly accessible</i> environments (bindings of names to slots).<p>Since functions also have environments, we can come up with some contrived use cases whereby a rigorously encapsulated OOP example revolving around a class that is sealed against extension and uses no inheritance or other OOP mechanisms is nicely mimiced by a vector of functions that share the same environment.<p>But imitating some facets of a thing is not being that thing. A dog standing on hind legs isn&#x27;t a man.<p>A more fully featured OOP can be built up, which yet keeps using lexical variables for slots. Public access to slots by name can  be implemented by having a standard function supported at the same position in the function table, which takes a symbol argument, and switches on it to map it to a variable in its environment.<p>Providing possible implementation mechanisms for thing is also not being that thing.<p>We can easily reverse this, too, and claim that functions are just objects. Compilers for lexical closures do things like flatten the environment into an array in which items are accessed by position. So, first class functions are, under the hood, nothing but code, plus an array, in machine language. And since data structures are also some code offsetting into arrays, it&#x27;s all the same.<p>You know, the moment I saw a NAND gate schematic, my mind opened to an amazing revelation: we don&#x27;t need both zeros and ones, just zeros and NAND gates! The number one is nothing but a zero, duplicated into the two inputs of a NAND gate.