freenode/#lisp - IRC Chatlog
Search
23:39:00
sjl
I guess you can read that as "ONLY available for use in any finally clause", yeah. yet another reason I use iterate more, hah
23:41:22
sjl
oh, > During each iteration, the constructs collect and collecting collect the value of the supplied form into a list. When iteration terminates, the list is returned. The argument var is set to the list of collected values; if var is supplied, the loop does not return the final list automatically.
23:41:23
_death
not that I can see, but it does say you can accumulate multiple times into the same destination
23:42:12
White_Flame
right, but what's the readable scope of that variable? only finally is mentioned, but as you note it's not exclusively worded
23:42:32
_death
if you can, then it's interesting that you can create a circular list that way.. (loop repeat 2 collect foo into foo finally (return foo))
23:46:33
White_Flame
hmm, (loop for x from 1 to 10 collect (list x y) into y) just returns NIL for me, no error
23:49:25
sjl
setting *print-circle* will tell lisp to spend some more effort during printing to detect circular structures and avoid choking on them
23:50:42
sjl
Doesn't seem super surprising... it's collecting into a list. Each iteration, it adds a two-element list onto the end of the list. That two-element list happens to contain the original list in this case.
23:51:51
sjl
yeah after reading 6.1.3 I'm 90% sure it has to work like I originally thought to be compliant
23:56:08
White_Flame
the original question I was looking at is if it would be able to push & nreverse, but I think this would make that too heavyweight and basically forces appending to the tail
23:58:41
_death
solrize: (defun collatz (n) (loop for k = n then (if (oddp k) (1+ (* k 3)) (floor k 2)) and prev = 0 then k until (= prev 1) collect k))
0:00:47
sjl
obligatory overengineered iterate version https://github.com/sjl/euler/blob/master/src/utils.lisp#L573-L588 :)
0:34:54
sjl
the other headings are right because I gen them with a keybind... it's just the one that my idiot self typed by hand that's hosed
2:30:49
ahungry
Does scheme have something similar to a plist in CL or a map in Clojure? A simple way to get a field out like (getf '(:x 1 :y 2) :x) => 1 - I know of assoc - I guess I could write a wrapper to get the cadr of one
2:32:37
ahungry
Seems that wouldn't really solve my want of having a simple literal format for the data though, so I'd probably just have to make something that walks a list 2 atoms at a time and stops if the first matches my lookup
2:38:35
p_l
ahungry: not sure how standard it is, but: https://groups.csail.mit.edu/mac/ftpdir/scheme-7.4/doc-html/scheme_12.html
3:03:43
solrize
ahungry, there's some srfi's for all kinds of stuff like that... #scheme would know more
3:05:38
aeth
specifically, jcowan will know more about Scheme implementation support of $feature in #scheme
4:11:29
fiddlerwoaroof
In terms of LOOP alternatives, there's also https://github.com/Shinmera/for, which I prefer to iterate, if I'm going to use a library
9:27:37
ogamita
shrdlu68: I dare you write an implementation of LISP in Common Lisp. Call it (ql:quickload "lispĀ²")
10:14:36
d4ryus
hi, is there a way to create a in memory stream? I would like to pass one 'end' to a thread running uiop/run-programm and the other 'end' to a thread which reads from it.
11:06:03
lieven
the standard doesn't describe threads so adding those would be an exercise for the reader
11:07:51
d4ryus
but sadly uiop/run-programm does not write into the stream until the programm has finished :(
11:08:08
lieven
a good match for that problem is the mailbox API. it's native in lispworks and there are ports to other lisps