3 ms·
ITERATE still breaks when you use `count` inside it, the built-in CL function. If they ever address that problem I'll get back to use it but having a time bomb
by Jtsummers 2y ago
ITERATE still breaks when you use `count` inside it, the built-in CL function. If they ever address that problem I'll get back to use it but having a time bomb in my programs isn't something I like.
Trivial example of breakage:
(iter (for i from 1 to 10)
(print (count i some-sequence)))
- shawn_w 2y agoBreaks how? I'm on my phone, not a computer right now and can't test, but that should call the CL function - ITERATE uses `counting` for that particular operation to avoid conflicts; see https://iterate.common-lisp.dev/doc/Gathering-Clauses.html https://iterate.common-lisp.dev/doc/Gathering-Clauses.html Or is the documentation wrong?
- Jtsummers 2y agoApparently this is a quicklisp problem, they haven't updated the release since 2021 when it was still broken.
- shawn_w 2y agoI just grabbed the latest ITERATE source off of its gitlab repository, and, yeah, that bit is still giving an error: Iterate, in (COUNT I SOME-SEQUENCE): Missing value for SOME-SEQUENCE keyword as well as WARNING: COUNT appears to be used as an ITERATE clause keyword, in this sexpression: (COUNT I SOME-SEQUENCE). This use is now deprecated and will cease to be supported in a future version. Please use the alternative keyword COUNTING instead. If you intended COUNT to be interpreted as a function call, instead of an ITERATE clause, you must find an alternative way of calling it, at present, perhaps by using FUNCALL or APPLY. Have to use (iter (for i from 1 to 10) (print (funcall #'count i some-sequence))) Guess the documentation /is/ wrong (for now, until the code finishes catching up)
- Jtsummers 2y agoWell, some-sequence was obviously an example, you'd have to fill it in with an actual sequence. Put in '(1 2 3) instead or assign something to it. But yeah, that's still not something I intend to use if they make you work around what should be plain Common Lisp.
- shawn_w 2y agoI had a some-sequence variable defined. (Using a literal list or vector gives a different error)
- BoingBoomTschak 2y agoIt's been marked as deprecated for some time, but still needs manual removal as of now: https://gitlab.common-lisp.net/iterate/iterate/-/blob/master/iterate.lisp?ref_type=heads#L1055 https://gitlab.common-lisp.net/iterate/iterate/-/blob/master... (removing https://gitlab.common-lisp.net/iterate/iterate/-/blob/master/iterate.lisp?ref_type=heads#L2882 https://gitlab.common-lisp.net/iterate/iterate/-/blob/master... should work, I think). Still better than the loop abomination, IMO.
- kazinator 2y agoI made a loop macro using the C preprocessor, for the Awk language. I had to rub my own eyes to believe that such a thing is possible. It comes with over twenty useful clauses. Clauses are programmer-definable. Clauses can combine in parallel or nested/cross-product iteration. https://www.kylheku.com/cgit/cppawk/about/ https://www.kylheku.com/cgit/cppawk/about/