4 ms·
The event loop is brilliant example for how much `loop` is a full blown iteration DSL... love it or hate it ;)
by Guthur 2y ago
The event loop is brilliant example for how much `loop` is a full blown iteration DSL... love it or hate it ;)
- awkravchuk 2y agoI used to scoff at it at first, but after a few years of CL programming loop is one of my favourite CL constructs :)
- taeric 2y agoI'm with you there. Is a bit of a mind bend, as I really disliked it the first few times I saw it. For an even sillier mind bend, I'm using tagbody to be able to directly transcribe some of Knuth's algorithms as I am learning them.
- awkravchuk 2y agoCool! Using tagbody feels like writing supercharged C or even assembler to me (not that I've used it much, but still).
- CyberDildonics 2y agoI don't understand why turning a simple loop into a 'mindbend' is considered good. The downfall of programming is complexity, if you're getting your mind blown by a loop how are you going to do the rest of the program?
- zelphirkalt 2y agoSomething can be mindbending in its implementation, but offer a very convenient interface at the same time. If mindbending isn't relating to its usage, but to its implementation, then I could see, how it could still be a good thing.
- exe34 2y agomindbending can also refer to something being deceptively simple. you might think it would be a big complicated mess, but using this one weird trick makes it really obvious what's going on.
- CyberDildonics 2y agoHow does that relate to a simple loop construct though? Why would you want that to be mind bending in interface or implementation? Every other language makes it as simple as possible.
- SatvikBeri 2y agoThis isn't really true – you have languages like Odin that only have a for loop, no while loop, that only supports index-based iteration. Then you have languages like Python that let you loop over an arbitrary iterable, and define your own iterables. Some languages allow conditionals in loops, some don't. Some let you loop over multiple iterables, while some only take one at a time. Common Lisp happens to be on the upper end of what loop allows – you can use it as a standard for loop pretty easily, but the interface gives you many other options.
- medo-bear 2y ago> Common Lisp happens to be on the upper end of what loop allows – you can use it as a standard for loop pretty easily, but the interface gives you many other options. If you really wanna get freaky try 'do. It is the heroin addicted cousin of 'loop https://www.lispworks.com/documentation/HyperSpec/Body/m_do_do.htm https://www.lispworks.com/documentation/HyperSpec/Body/m_do_...
- shawn_w 2y ago`do` is very straightforward and basic compared to the things that `loop` allows.
- 2y ago
- taeric 2y agoThe mindbend was more of my approach to the construct. It began with disdain before even really using it much. Looking back, I really couldn't articulate what I disliked about it.
- 0xdeadbeefbabe 2y agoHe started with a bent mind though.
- medo-bear 2y agoSimple minds loop simply
- CyberDildonics 2y agoI don't think this comment means anything or contains any information.
- medo-bear 2y agoColorless green ideas sleep furiously
- CyberDildonics 2y agoThis seems like you're replying with nonsense. Did you have anything coherent to say?
- BoingBoomTschak 2y agoWhy loop when you can https://iterate.common-lisp.dev/ https://iterate.common-lisp.dev/ instead? No s-expr-less alien syntax, no need for `do` to switch to back to Lisp syntax, normal `if`/`when` without the ugly `else`/`end` and generally useful features added.
- Jtsummers 2y agoHave they fixed the problem in Iterate yet where it breaks any uses of the built-in count function?
- BoingBoomTschak 2y agoSadly no. Biggest bug in there, "fortunately". Easy to patch, though.
- shawn_w 2y agoIf I used Common Lisp more I'd probably have a go at copying Racket's `for` forms[1]; they're really nice because you can usally tell at a glance what they're going to return - `for/list` returns a list for example. No having to scan the body for a `collect`. But in the meantime since discovering iterate I've barely used `loop`. It just feels so much more lispy and I find myself running to the documentation less often. [1]: https://docs.racket-lang.org/reference/for.html https://docs.racket-lang.org/reference/for.html
- BoingBoomTschak 2y agoInteresting concept, but it visually has the same problem as loop IMO, using keywords to implement a new syntax instead of seamlessly blending with Lisp (at the cost of needing code walking, though). And it seems to lack all the iterations drivers (incl. builtin destructuring) that make half of loop/iterate's usefulness and "reads like English" comfy factor; especially liking (for (i j) on list [by #'cddr]) (for i initially init-expr then then-expr) (for prev previous i [initially init-expr]) (for i in-{file,stream} [using #'reader]) The two lasts are iterate goodies and I often use the last with these custom readers: https://git.sr.ht/~q3cpma/cl-utils/tree/master/item/src/readers.lisp https://git.sr.ht/~q3cpma/cl-utils/tree/master/item/src/read...