&gt; Because Lisp doesn&#x27;t have a flat memory model, you can&#x27;t directly produce a binary array suitable for direct copying to output device memory (ex. network card, GPU, etc) by simply expanding expressions using the built in syntax.<p>What are you talking about?  Common Lisp has built-in support for vectors:<p><pre><code>    (let ((vector (make-array length :element-type &#x27;unsigned-byte)))
      ;; do stuff with that flat array of bytes
      ;; …
      (replace ext:gpu vector))
</code></pre>
(In this example, EXT:GPU is a chunk of memory which is overwritten by VECTOR; one might conceivably use COPY-SEQ instead of MAKE-ARRAY, and one might of course just operate on EXT:GPU)<p>&gt; Doing so is also contrary to the ideals of functional programming<p>Lisp isn&#x27;t about functional programming; Lisp is a multi-paradigm language, supporting imperative, functional and OO programming out of the box (and can of course be extended to support aspect-oriented programming, table-oriented programming or what-have-you).