<story><title>Lisp as the Maxwell’s equations of software</title><url>http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/</url></story><parent_chain></parent_chain><comment><author>daniel-cussen</author><text>I discovered you can get eval to recognize natural numbers without introducing more primitives if you take the number in binary, enter it into a list, reverse it, and replace the 1&apos;s with t&apos;s and the 0&apos;s with nil&apos;s.&lt;p&gt;If you do it that way, you can binary right shift a number by consing a nil at the front, or binary left shift by taking the cdr.  You can increment, decrement, add and subtract efficiently, too.  Even take logarithms.&lt;p&gt;I had to use this to replace Lisp&apos;s namesake linked lists with another data structure that allowed many of the same niceties, but required some math, and therefore naturals, to find elements in the data structure.  It was an interesting project.  If you made it through the whole article, you might want to look:&lt;p&gt;&lt;a href=&quot;http://dcussen.posterous.com/lisp-in-lisp-without-linked-lists&quot; rel=&quot;nofollow&quot;&gt;http://dcussen.posterous.com/lisp-in-lisp-without-linked-lis...&lt;/a&gt;</text></comment>
<story><title>Lisp as the Maxwell’s equations of software</title><url>http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/</url></story><parent_chain></parent_chain><comment><author>cageface</author><text>Certainly there&apos;s something very intellectually appealing about a completely transparent stack of abstractions in which all the upper layers can be ultimately be expressed in terms of atomic operations.&lt;p&gt;However, I&apos;m not so sure this is really so important in practice. We tend to operate within bounded layers of abstraction for any given problem and it&apos;s far more important that those layers are predictable, comprehensible, and, ideally, well-documented.&lt;p&gt;This is why a language like Java, for instance, can be very productive even though the fundamental abstractions are not plastic. And this is also why more malleable languages like Scheme or Lisp can be less productive because there&apos;s not enough consensus on how the higher layers should be defined.</text></comment>