Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I feel bad for people who haven't discovered ITERATE yet.


I'll never understand the love for iterate. Look at these comparisons: https://github.com/sabracrolleton/sabracrolleton.github.io/b... For almost all of them, it's the same guy, just more parens. Nothing to love/hate for one or the other, it's just preference, though one is built-in.


The big plus for me is that the ad-hoc if/when/do are removed in favour of the standard operators, without the horrible then/else/end/and dance.

Then you got all the life-improving goodies (in-{sequence,string,file,stream}, index-of-*, previous, etc...) that really add up to something.


Looks more lispy because the parens. Plus it's extendable unlike LOOP, so you can make it work with your own data types. And a few other nice features like being able to collect into a vector or other sequence, not just lists.


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)))


Breaks 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

Or is the documentation wrong?


Apparently this is a quicklisp problem, they haven't updated the release since 2021 when it was still broken.


I 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)


Well, 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.


I had a some-sequence variable defined.

(Using a literal list or vector gives a different error)


It'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... (removing https://gitlab.common-lisp.net/iterate/iterate/-/blob/master... should work, I think).

Still better than the loop abomination, IMO.


I 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/




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: