Wed May 29 19:00:52 EDT 2013

Delay lines already are SISO systems

Wait.  Why not stick to the simpler approach?  Delays are implemented
using state space systems.  Abstract that!  And it looks like this is
already the case.  The abstraction is good, it's the naming that's
problematic, or the relation to the basic idea: arrays of shifted

(define (delay (s0 s1 s2) (x))
  (let* ((delay-out s2)
         (feedback 1/2)
         (delay-in  (+ x (* feedback delay-out))))
    (values delay-in s0 s1   ;; shift all delays
            delay-in)))      ;; output    

So instead of using s0 s1 ... sn, the line is abstracted as a single
array, but it remains possible to access all the taps.

The limitation lies in the recombination possibility: only shift is
allowed, not a generic permutation.