I would argue that iterate is more powerful as well as being more lispy in the sense that it's extensible and macro-programmable.
https://iterate.common-lisp.dev/
(defpackage :test (:use :cl :iterate)) (in-package :test) (defun test-iter () (declare (optimize (debug 3) (safety 3) (speed 0))) (iter:iter ;;; <-- highlights whole ITER form (sleep 2) (error "test"))) (defun test-loop () (declare (optimize (debug 3) (safety 3) (speed 0))) (loop :do (sleep 2) :do (error "test"))) ;;; <-- highlights ERROR form
(let ((list '(1 2 3 4 1 2 3 4))) ;; or whatever other sequence (iter (for i from 1 to 10) (sum (count i list))))
(let ((list '(1 2 3 4 1 2 3 4))) (loop for i from 1 to 10 sum (count i list))) ;; => 8
https://gitlab.common-lisp.net/iterate/iterate/-/issues/12 - Apparently it's known and they intend to remove it in 2.0, which isn't out yet.
I would argue that iterate is more powerful as well as being more lispy in the sense that it's extensible and macro-programmable.
https://iterate.common-lisp.dev/