Arc Forumnew | comments | leaders | submitlogin
5 points by almkglor 6115 days ago | link | parent

You're passing in a list using ' - this is the problem

  (cons '(()) lst)
Try doing something like this:

  (def foo ()
   (let acc '(())
     (push 1 (car acc))))
  arc> (foo) (foo)
^^

Generally, don't use '(...), unless you really really really have to. Use the longer 'list instead:

  (cons (list ()) lst)


3 points by map 6115 days ago | link

As you hinted, the output of your example surprised me:

  (1)(1 1)
And your suggestion fixed my routine. But I don't understand why.

-----

5 points by eds 6115 days ago | link

It's because 'quote doesn't necessarily create a new list every time (at least not in function definitions). If you do

  (def foo ()
    '(a b c))
(foo) will return the same list every time, so if you modify the list in or before your next call, you'll get the modified instead of the original value.

-----

2 points by map 6115 days ago | link

That helps. Thanks.

-----