Hi Lindsay,

> Bijective Burrows Wheeler Transform
> https://github.com/thinknlive/picolisp-bbwt

Cool! This code looks very good! :)


> As I was working on this I realized I need to start thinking about how to
> organize my code...
> 
> The two main functions, encodeBBWT and decodeBBWT feel larger than they
> should be because I have defined smaller functions within them that use
> variables in the same scope.
> 
> My question:  Is there an 'idiomatic' or recommended way to organize module
> or project code in picolisp?

Binding the functions 'Put' and 'Bwt' locally is perfectly legal, but not really
necessary here, as they never change. So they just create (minimal) runtime
overhead. I would define them the normal way, perhaps as transient symbols if I
want to hide them from the outside world:

   (de "put" (B C)
      (let (V ...

   (de "bwt" (W)
      (let (C ...


Using a namespace is also possible, but too much overhead in my feeling for such
a small file. It would go like this:

   (symbols 'bbwt 'pico)
   (local put bwt)

   (de put (B C)  # Shadows the built-in 'put', use with care
      (let (V ...

   (de bwt (W)
      (let (C ...

   (de pico~encodeBBWT (L)
      ...

   (de pico~decodeBBWT (L)
      ...

This creates the symbol 'encodeBBWT' in the 'pico' namespace. Another (I think
better) way is:

   (de encode (L)
      ...

   (de decode (L)
      ...

and later, when used from another namespace, call it as

   (bbwt~encode ...)
   (bbwt~decode ...)


Concerning 'Debug', I would omit it here, and call (trace 'encodeBBWT) or (trace
'bbwt~encode) or (mapc trace '(bbwt~encode bbwt~decode bbwt~put bbwt~bwt) to
debug it.

Other minor improvements:

                  V2 (car (cdr V)) )
->
                  V2 (cadr V) )


               (while (car W)
                  (if (not (cdr W))
                     (Put C (car W))
                     (Put (car (cdr W)) (car W)) )
->
               (while (car W)
                  (Put
                     (ifn (cdr W) C (cadr W))
                     (car W) )

and some similar cases :)

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to