Hi Lindsay,

> The code below is the recursive Gosper implementation I came up with that
> uses very little stack. This version just emits states.
> ...
> Picolisp continues to impress me with its expressiveness and power.

As ever, I can't resist to suggest some optimizations :)

> (de Plot (L)
>    (map '((X) (prin (car X))) L) )

(mapc prin L) would be enough.

> (de Fn (L)
>    (let R
>       (fish
>          atom
>          (mapcar
>             '((X)
>                (cond
>                   ((= X "A") A)
>                   ((= X "B") B)
>                   (T X) ) )
>             L ) )
>       R ) )

The 'let' is not necessary, as R is never used. And 'fish' is for nested
structures, a flat list can be handled directly e.g. with 'filter' or 'extract'

   (extract '((X) (cond ((pair X)) ((=X "A") A) ..)) L)

As 'A' and 'B' are free variables here, 'Fn' should be named differently,
starting with an underscrore (see doc/ref.html#conv)). You coud try 'lint' or
'lintAll' to see what it complains.

The PicoLisp naming conventions also recommend upper case first letters for
locally bound variables. Functions defined globally like 'Plot' or 'Fn' should
better start in lower case.

> (de L-Run (L D)
>    (cond
>       ((>= D MaxDepth) (Plot L))
>       (T

Here an 'if' is shorter than a 'cond'.

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

Reply via email to