Here's a naive implementation:

(de list-make ("Lst")
  (queue "Lst" "("))

(de list-link ("Lst" Node)
  (queue "Lst" Node)
  (queue "Lst" " "))

(de list-close ("Lst")
  (queue "Lst" ")"))


(de list-close-all ("Lst")
  (let (Open (length (sect (val "Lst") (list "(" )))
        Close (length (sect (val "Lst") (list ")" ))))
  (for X (- Open Close)
    (queue "Lst" ")")))
    (car (str (pack (val "Lst")))))

(setq L NIL)
(list-make 'L)
(list-make 'L)
(list-link 'L 'parent)
(list-make 'L)
(list-link 'L 'child)
(list-link 'L 'child)
(list-close-all 'L)

-> ((parent (child child)))

I don't know how I feel about it...


On Mon, Nov 26, 2012 at 1:11 PM, Joe Bogner <joebog...@gmail.com> wrote:

> I'm sure I'm making this harder than it is. I spent several hours
> tinkering around trying to find a way to sequentially build a nested list.
>
> make and link have spoiled me.
>
> Instead of this:
>
> : (make (link (make (link 'parent (make (link 'child 'child))))))
> -> ((parent (child child)))
>
> or
>
> : (list (list 'parent (list 'child 'child))))
> -> ((parent (child child)))
>
> I would like to do
>
> (setq L NIL)
> (list-make 'L)
> (list-make 'L)
> (list-link 'L 'parent)
> (list-make 'L)
> (list-link 'L 'child)
> (list-link 'L 'child)
>
> Or something along those lines. The reason for the question is that I find
> myself building things in for loops and it seems like I would need to use
> some form of recursion to build it with make or list.
>
> I've had some success with push and queue but was wondering if there's a
> more elegant way.
>
>

Reply via email to