4 ms·
oh no. maybe you have in mind 'dolist or 'dotimes 'do is much more general and way more powerful. in some sense 'loop is the taming of 'do. see for example ht
by medo-bear 2y ago
oh no. maybe you have in mind 'dolist or 'dotimes
'do is much more general and way more powerful. in some sense 'loop is the taming of 'do. see for example
https://www.lispworks.com/documentation/lcl50/loop/loop-7.html https://www.lispworks.com/documentation/lcl50/loop/loop-7.ht...
- shawn_w 2y agoNo, I mean do. It's basically just a C style for loop except with a return value. Nothing special.
- medo-bear 2y agoyes the syntax for 'do is simple, like that of lisp. however 'do allows you to make far more complex iteration constructs than 'loop. 'loop is just a DSL to make some of these constructs more concise. read up on it
- lispm 2y agoLOOP has the DO functionality included. Example: CL-USER 18 > (do ((a 1 (+ a 1)) (b 10 (* b 1.5)) (c nil)) ((> a 5) (list a b (reverse c))) (push (* a b) c)) (6 75.9375 (10 30.0 67.5 135.0 253.125)) CL-USER 19 > (loop for a = 1 then (+ a 1) and b = 10 then (* b 1.5) and c = NIL then c when (> a 5) do (return (list a b (reverse c))) do (push (* a b) c)) (6 75.9375 (10 30.0 67.5 135.0 253.125))
- medo-bear 2y agoYou can also express LOOP constructs in terms of DO. However if you were to construct a more exotic iterator that is not so straight forward in LOOP (beware of edge cases), I think it is more reasonable to pick DO. I think also that your example illustrates this.
- lispm 2y agoI would miss the in-order collects, actually collect/maximize/... features, destructuring of lists, direct type declarations, ... I also find DO not easy to read and understand. The code from above I would actually write in LOOP as (loop for a from 1 upto 5 and b = 10 then (* b 1.5) collect (* a b) into c finally (return (list a b c))) I find that to be readable.
- medo-bear 2y agoOf course to each their own. I like LOOP a lot actually when I need to do something familiar, however for something unfamiliar DO is often my choice. It also serves as a caution to tread and think carefully when I return to the code. Sometimes, after a while, I realise how to do the DO construct succintly with LOOP