Actually Common Lisp supports a gazillion of different programming styles.<p>The version with small functions, similar to the Haskell version:<p><pre><code>    (subseq
     (remove-if
      (complement #&#x27;numberp)
      (butlast list 3))
     0 5)
</code></pre>
In above Common Lisp code, we use four different functions which do one task:<p><pre><code>    * subseq sequence start &amp;optional end =&gt; subsequence
    * remove-if test sequence =&gt; result-sequence
    * complement function =&gt; complement-function
    * butlast list &amp;optional n =&gt; result-list


</code></pre>
For different approaches see Common Lisp libraries like Series or Iterate... Iterate is LOOP on steroids.<p><a href="http:&#x2F;&#x2F;series.sourceforge.net" rel="nofollow">http:&#x2F;&#x2F;series.sourceforge.net</a><p><a href="https:&#x2F;&#x2F;common-lisp.net&#x2F;project&#x2F;iterate&#x2F;" rel="nofollow">https:&#x2F;&#x2F;common-lisp.net&#x2F;project&#x2F;iterate&#x2F;</a><p>&gt; This is known as composability, or the UNIX philosophy. In Lisp a procedure tends to accept many options which configure its behaviour.<p>Check out the UNIX man for tail, grep, ... to see how strange above quote about &#x27;unix philosophy&#x27; is. In reality Unix commands are programs with obscene amount of configuration options, sometimes piping data as text around, sometimes glued together by strange shell languages...