Hi,

The Scieneer CL and ACL have non-standard versions or modes in which the standard symbols are lower case and this can be accommodated with some minor changes.

Regards
Douglas Crosher

diff -rc iterate-20111001-darcs/iterate.lisp 
../iterate-20111001-darcs/iterate.lisp
*** iterate-20111001-darcs/iterate.lisp 2011-10-02 01:17:06.000000000 +1000
--- ../iterate-20111001-darcs/iterate.lisp      2011-11-01 22:41:34.000000000 
+1100
***************
*** 2324,2342 ****
        (setf (cdr entry) doc-string))
      symbol))
  
! ;;; (INITIALLY &rest)
  (def-special-clause initially (&rest forms)
    "Lisp forms to execute before loop starts"
    (mapc #'local-binding-check forms)
    (return-code :initial (copy-list forms)))
  
! ;;; (AFTER-EACH &rest)
  (def-special-clause after-each (&rest forms)
    "Lisp forms to execute after each iteration"
    (mapc #'local-binding-check forms)
    (return-code :step (walk-list forms)))
  
! ;;; (ELSE &rest)
  (def-special-clause else (&rest forms)
    "Lisp forms to execute if the loop is never entered"
    (mapc #'local-binding-check forms)
--- 2324,2342 ----
        (setf (cdr entry) doc-string))
      symbol))
  
! ;;; (initially &rest)
  (def-special-clause initially (&rest forms)
    "Lisp forms to execute before loop starts"
    (mapc #'local-binding-check forms)
    (return-code :initial (copy-list forms)))
  
! ;;; (after-each &rest)
  (def-special-clause after-each (&rest forms)
    "Lisp forms to execute after each iteration"
    (mapc #'local-binding-check forms)
    (return-code :step (walk-list forms)))
  
! ;;; (else &rest)
  (def-special-clause else (&rest forms)
    "Lisp forms to execute if the loop is never entered"
    (mapc #'local-binding-check forms)
***************
*** 2345,2376 ****
                            .,(walk-list forms)))
                   :body (list `(setq ,flag nil)))))
  
! ;;; (FINALLY &rest)
  (def-special-clause finally (&rest forms)
    "Lisp forms to execute after loop ends"
    (mapc #'local-binding-check forms)
    (return-code :final (copy-list forms)))
  
! ;;; (FINALLY-PROTECTED &rest)
  (def-special-clause finally-protected (&rest forms)
!   "Lisp forms in an UNWIND-PROTECT after loop ends"
    (mapc #'local-binding-check forms)
    (return-code :final-protected (copy-list forms)))
  
! ;;; (IF-FIRST-TIME then &optional else)
  (def-special-clause if-first-time (then &optional else)
    "Evaluate branch depending on whether this clause if met for the first time"
    (return-code :body (list
                      (if-1st-time (list (walk-expr then))
                                   (if else (list (walk-expr else)))))))
  
! ;;; (FIRST-TIME-P)
! (def-special-clause FIRST-TIME-P ()
    "True when evaluated for the first time"
    (return-code :body (list (if-1st-time '(t)))))
  
! ;;; (FIRST-ITERATION-P)
! (def-special-clause FIRST-ITERATION-P ()
    "True within first iteration through the body"
    ;; Like (with ,var = t) (after-each (setq ,var nil))
    ;; except all these clauses shares a single binding.
--- 2345,2376 ----
                            .,(walk-list forms)))
                   :body (list `(setq ,flag nil)))))
  
! ;;; (finally &rest)
  (def-special-clause finally (&rest forms)
    "Lisp forms to execute after loop ends"
    (mapc #'local-binding-check forms)
    (return-code :final (copy-list forms)))
  
! ;;; (finally-protected &rest)
  (def-special-clause finally-protected (&rest forms)
!   "Lisp forms in an 'unwind-protect after loop ends"
    (mapc #'local-binding-check forms)
    (return-code :final-protected (copy-list forms)))
  
! ;;; (if-first-time then &optional else)
  (def-special-clause if-first-time (then &optional else)
    "Evaluate branch depending on whether this clause if met for the first time"
    (return-code :body (list
                      (if-1st-time (list (walk-expr then))
                                   (if else (list (walk-expr else)))))))
  
! ;;; (first-time-p)
! (def-special-clause first-time-p ()
    "True when evaluated for the first time"
    (return-code :body (list (if-1st-time '(t)))))
  
! ;;; (first-iteration-p)
! (def-special-clause first-iteration-p ()
    "True within first iteration through the body"
    ;; Like (with ,var = t) (after-each (setq ,var nil))
    ;; except all these clauses shares a single binding.
***************
*** 2384,2390 ****
      (return-code :body `(,var)
                   :step step-body)))
  
! ;;; (IN &body)
  (def-special-clause in (block-name &rest forms)
    "Process forms in a named Iterate block"
    ;; VALUE: depends on forms
--- 2384,2390 ----
      (return-code :body `(,var)
                   :step step-body)))
  
! ;;; (in &body)
  (def-special-clause in (block-name &rest forms)
    "Process forms in a named Iterate block"
    ;; VALUE: depends on forms
***************
*** 2392,2398 ****
        (walk-list forms)
        `((in ,block-name ,.(copy-list forms)))))
  
! ;;; (NEXT var)
  (def-special-clause next (var &optional (n 1))
    "Explicitly step a driver variable"
    ;; VALUE: var, after stepping.
--- 2392,2398 ----
        (walk-list forms)
        `((in ,block-name ,.(copy-list forms)))))
  
! ;;; (next var)
  (def-special-clause next (var &optional (n 1))
    "Explicitly step a driver variable"
    ;; VALUE: var, after stepping.
***************
*** 2596,2609 ****
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Hash-table, Packages and Streams
  
! ;;; (FOR IN-HASHTABLE)
  (defclause-driver (for key-val-vars in-hashtable table)
    "Elements and keys of a hashtable"
    (top-level-check)
    (unless (consp key-val-vars)
      (clause-error "~a should be a list of up to two variables: the first ~
    for the keys, the second for the values." key-val-vars))
!   (let* ((iterator (gensym "HASH-TABLE-ITERATOR-"))
         (more?    (gensym))
         (var-spec `(values ,more? .,key-val-vars))
         (setqs    (do-dsetq var-spec `(,iterator)))
--- 2596,2609 ----
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Hash-table, Packages and Streams
  
! ;;; (for in-hashtable)
  (defclause-driver (for key-val-vars in-hashtable table)
    "Elements and keys of a hashtable"
    (top-level-check)
    (unless (consp key-val-vars)
      (clause-error "~a should be a list of up to two variables: the first ~
    for the keys, the second for the values." key-val-vars))
!   (let* ((iterator (gensym (symbol-name '#:hash-table-iterator-)))
         (more?    (gensym))
         (var-spec `(values ,more? .,key-val-vars))
         (setqs    (do-dsetq var-spec `(,iterator)))
***************
*** 2614,2620 ****
      (return-driver-code :next (list setqs test)
                        :variable var-spec)))
  
! ;;; (FOR IN-PACKAGES &optional HAVING-ACCESS)
  (defclause-driver (for sym-access-pkg-vars in-packages pkgs &optional 
having-access (sym-types '(:external :internal :inherited)))
    "Symbols and their access-types in packages"
    ;;defclause-driver has the benefit over defmacro-driver of less code walking
--- 2614,2620 ----
      (return-driver-code :next (list setqs test)
                        :variable var-spec)))
  
! ;;; (for in-packages &optional having-access)
  (defclause-driver (for sym-access-pkg-vars in-packages pkgs &optional 
having-access (sym-types '(:external :internal :inherited)))
    "Symbols and their access-types in packages"
    ;;defclause-driver has the benefit over defmacro-driver of less code walking
***************
*** 2626,2632 ****
    (unless (consp sym-types)
      (clause-error "~s should be a list of symbols indicating the symbols' ~
    access types." sym-types))
!   (let* ((iterator (gensym "PACKAGE-ITERATOR-"))
         (more?    (gensym))
         (var-spec `(values ,more? .,sym-access-pkg-vars))
         (setqs    (do-dsetq var-spec `(,iterator)))
--- 2626,2632 ----
    (unless (consp sym-types)
      (clause-error "~s should be a list of symbols indicating the symbols' ~
    access types." sym-types))
!   (let* ((iterator (gensym (symbol-name '#:package-iterator-)))
         (more?    (gensym))
         (var-spec `(values ,more? .,sym-access-pkg-vars))
         (setqs    (do-dsetq var-spec `(,iterator)))
***************
*** 2636,2654 ****
      (return-driver-code :next (list setqs test)
                        :variable var-spec)))
  
! ;;; (FOR IN-PACKAGE &optional EXTERNAL-ONLY)
  (defmacro-driver (for var in-package pkg &optional external-only (ext nil))
    "Symbols accessible in a package"
    `(,(if generate 'generate 'for) (,var) in-packages ,pkg having-access
         ,(if ext '(:external) '(:external :internal :inherited))))
  
! ;;; (FOR IN-FILE &optional USING)
  (defclause-driver (for var in-file filename &optional using (reader '#'read))
    "Forms in a file"
    (top-level-check)
    (return-stream-driver-code var filename reader :file generate))
  
! ;;; (FOR IN-STREAM &optional USING)
  (defclause-driver (for var in-stream stream &optional using (reader '#'read))
    "Forms in a stream (which will be closed at the end)"
    (top-level-check)
--- 2636,2654 ----
      (return-driver-code :next (list setqs test)
                        :variable var-spec)))
  
! ;;; (for in-package &optional external-only)
  (defmacro-driver (for var in-package pkg &optional external-only (ext nil))
    "Symbols accessible in a package"
    `(,(if generate 'generate 'for) (,var) in-packages ,pkg having-access
         ,(if ext '(:external) '(:external :internal :inherited))))
  
! ;;; (for in-file &optional using)
  (defclause-driver (for var in-file filename &optional using (reader '#'read))
    "Forms in a file"
    (top-level-check)
    (return-stream-driver-code var filename reader :file generate))
  
! ;;; (for in-stream &optional using)
  (defclause-driver (for var in-stream stream &optional using (reader '#'read))
    "Forms in a stream (which will be closed at the end)"
    (top-level-check)
***************
*** 2685,2697 ****
       :variable var)))
    
    
! ;;; (FOR NEXT)
  (defclause-driver (for var next next)
    "General driver; VAR is set to value of NEXT"
    (return-driver-code :variable var
                      :next (list (do-dsetq var (walk-expr next)))))
    
! ;;; (FOR DO-NEXT)
  (defclause-driver (for var do-next next)
    "General driver; VAR must be set in DO-NEXT"
      (do-dsetq var '(list)) ; for effect only, to make var known
--- 2685,2697 ----
       :variable var)))
    
    
! ;;; (for next)
  (defclause-driver (for var next next)
    "General driver; VAR is set to value of NEXT"
    (return-driver-code :variable var
                      :next (list (do-dsetq var (walk-expr next)))))
    
! ;;; (for do-next)
  (defclause-driver (for var do-next next)
    "General driver; VAR must be set in DO-NEXT"
      (do-dsetq var '(list)) ; for effect only, to make var known
***************
*** 2821,2827 ****
  
  (defsynonym count counting)
  
! ;;; (COUNTING &optional INTO)
  (defclause (counting expr &optional into var)
    "Increment a variable if expression is non-nil"
    (return-reduction-code :identity 0
--- 2821,2827 ----
  
  (defsynonym count counting)
  
! ;;; (counting &optional into)
  (defclause (counting expr &optional into var)
    "Increment a variable if expression is non-nil"
    (return-reduction-code :identity 0
***************
*** 2832,2838 ****
                         :type 'fixnum
                         :accum-kind :increment))
  
! ;;; (SUM &optional INTO)
  (defclause (sum expr &optional into var)
    "Sum into a variable"
    (return-reduction-code :identity 0
--- 2832,2838 ----
                         :type 'fixnum
                         :accum-kind :increment))
  
! ;;; (sum &optional into)
  (defclause (sum expr &optional into var)
    "Sum into a variable"
    (return-reduction-code :identity 0
***************
*** 2845,2851 ****
  
  (defsynonym summing sum)
  
! ;;; (MULTIPLY &optional INTO)
  (defclause (multiply expr &optional into var)
    "Multiply into a variable"
    (return-reduction-code :identity 1
--- 2845,2851 ----
  
  (defsynonym summing sum)
  
! ;;; (multiply &optional into)
  (defclause (multiply expr &optional into var)
    "Multiply into a variable"
    (return-reduction-code :identity 1
***************
*** 2859,2865 ****
  (defsynonym multiplying multiply)
  
  
! ;;; (REDUCING BY &optional INITIAL-VALUE INTO)
  (defclause (reducing expr by op &optional initial-value (init-val nil iv?)
                                          into var-spec)
    "Generalized reduction"
--- 2859,2865 ----
  (defsynonym multiplying multiply)
  
  
! ;;; (reducing by &optional initial-value into)
  (defclause (reducing expr by op &optional initial-value (init-val nil iv?)
                                          into var-spec)
    "Generalized reduction"
***************
*** 2899,2912 ****
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Extrema.
  
! ;;; (MAXIMIZE &optional INTO)
  (defclause (maximize expr &optional into var)
    "Maximize value of an expression"
    (return-extremum-code expr var 'max))
  
  (defsynonym maximizing maximize)
  
! ;;; (MINIMIZE &optional INTO)
  (defclause (minimize expr &optional into var)
    "Minimize value of an expression"
    (return-extremum-code expr var 'min))
--- 2899,2912 ----
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Extrema.
  
! ;;; (maximize &optional into)
  (defclause (maximize expr &optional into var)
    "Maximize value of an expression"
    (return-extremum-code expr var 'max))
  
  (defsynonym maximizing maximize)
  
! ;;; (minimize &optional into)
  (defclause (minimize expr &optional into var)
    "Minimize value of an expression"
    (return-extremum-code expr var 'min))
***************
*** 2945,2979 ****
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Control flow.
  
! ;;; (FIMISH)
  (defmacro finish ()
    "Leave the loop gracefully, executing the epilogue"
    (setq *loop-end-used?* t)
    `(go ,*loop-end*))
  
! ;;; (TERMINATE)
  (defmacro terminate () ; recommended for use with FOR ... NEXT
    "Use within FOR ... DO-/NEXT clause to end the iteration"
    '(finish))
  
! ;;; (NEXT-ITERATION)
  (defmacro next-iteration ()
    "Begin the next iteration"
    (setq *loop-step-used?* t)
    `(go ,*loop-step*))
  
! ;;; (LEAVE &optional)
  (defmacro leave (&optional value)
    "Exit the loop without running the epilogue code"
    `(return-from ,*block-name* ,value))
  
! ;;; (WHILE)
  (defclause (while expr)
    "Exit loop if test is nil"
    (setq *loop-end-used?* t)
    (return-code :body `((if (not ,(walk-expr expr)) (go ,*loop-end*)))))
  
! ;;; (UNTIL)
  (defclause (until expr)
    "Exit loop if test is non-nil"
    (setq *loop-end-used?* t)
--- 2945,2979 ----
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Control flow.
  
! ;;; (fimish)
  (defmacro finish ()
    "Leave the loop gracefully, executing the epilogue"
    (setq *loop-end-used?* t)
    `(go ,*loop-end*))
  
! ;;; (terminate)
  (defmacro terminate () ; recommended for use with FOR ... NEXT
    "Use within FOR ... DO-/NEXT clause to end the iteration"
    '(finish))
  
! ;;; (next-iteration)
  (defmacro next-iteration ()
    "Begin the next iteration"
    (setq *loop-step-used?* t)
    `(go ,*loop-step*))
  
! ;;; (leave &optional)
  (defmacro leave (&optional value)
    "Exit the loop without running the epilogue code"
    `(return-from ,*block-name* ,value))
  
! ;;; (while)
  (defclause (while expr)
    "Exit loop if test is nil"
    (setq *loop-end-used?* t)
    (return-code :body `((if (not ,(walk-expr expr)) (go ,*loop-end*)))))
  
! ;;; (until)
  (defclause (until expr)
    "Exit loop if test is non-nil"
    (setq *loop-end-used?* t)
***************
*** 2986,2992 ****
  ;; Use same :if-exists kind of accumulation as finding ... such-that
  ;; so the clauses can be used together.
  
! ;;; (ALWAYS)
  (defclause (always expr)
    "Return last value iff expression is always non-nil"
    ;; VALUE: primary value of expr
--- 2986,2992 ----
  ;; Use same :if-exists kind of accumulation as finding ... such-that
  ;; so the clauses can be used together.
  
! ;;; (always)
  (defclause (always expr)
    "Return last value iff expression is always non-nil"
    ;; VALUE: primary value of expr
***************
*** 2996,3002 ****
      (return-code :body `((or (setq ,var ,expr) 
                             (return-from ,*block-name* nil))))))
  
! ;;; (NEVER)
  (defclause (never expr)
    "Return T iff expression is never non-nil"
    ;; VALUE: always nil
--- 2996,3002 ----
      (return-code :body `((or (setq ,var ,expr) 
                             (return-from ,*block-name* nil))))))
  
! ;;; (never)
  (defclause (never expr)
    "Return T iff expression is never non-nil"
    ;; VALUE: always nil
***************
*** 3007,3013 ****
      (return-code :body `((if ,expr (return-from ,*block-name* nil))))))
  
  
! ;;; (THEREIS)
  (defclause (thereis expr)
    "Return value of expression as soon as it is non-nil"
    ;; VALUE: always nil
--- 3007,3013 ----
      (return-code :body `((if ,expr (return-from ,*block-name* nil))))))
  
  
! ;;; (thereis)
  (defclause (thereis expr)
    "Return value of expression as soon as it is non-nil"
    ;; VALUE: always nil
***************
*** 3020,3026 ****
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Finders.
  
! ;;; (FINDING SUCH-THAT &optional INTO ON-FAILURE)
  (defclause (finding expr such-that test &optional into var-spec
                                                  on-failure fval)
    "Return expression when test is non-nil"
--- 3020,3026 ----
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; Finders.
  
! ;;; (finding such-that &optional into on-failure)
  (defclause (finding expr such-that test &optional into var-spec
                                                  on-failure fval)
    "Return expression when test is non-nil"
***************
*** 3037,3043 ****
            (return-code :body `((when ,(make-funcall test expr)
                                   (setq ,var ,expr)
                                   (go ,*loop-end*))))
!           (let ((temp-var (gensym "FINDING")))
              (return-code :body `((let ((,temp-var ,expr))
                                     (when ,(make-funcall test temp-var)
                                       (setq ,var ,temp-var)
--- 3037,3043 ----
            (return-code :body `((when ,(make-funcall test expr)
                                   (setq ,var ,expr)
                                   (go ,*loop-end*))))
!           (let ((temp-var (gensym (symbol-name '#:finding))))
              (return-code :body `((let ((,temp-var ,expr))
                                     (when ,(make-funcall test temp-var)
                                       (setq ,var ,temp-var)
***************
*** 3046,3057 ****
                               (setq ,var ,expr)
                               (go ,*loop-end*)))))))
  
! ;;; (FINDING MAXIMIZING &optional INTO)
  (defclause (finding expr maximizing max-expr &optional into variable)
    "Return value which maximizes expression"
    (return-find-extremum-code expr max-expr variable :max))
  
! ;;; (FINDING MINIMIZING &optional INTO)
  (defclause (finding expr minimizing min-expr &optional into variable)
    "Return value which minimizes expression"
    (return-find-extremum-code expr min-expr variable :min))
--- 3046,3057 ----
                               (setq ,var ,expr)
                               (go ,*loop-end*)))))))
  
! ;;; (finding maximizing &optional into)
  (defclause (finding expr maximizing max-expr &optional into variable)
    "Return value which maximizes expression"
    (return-find-extremum-code expr max-expr variable :max))
  
! ;;; (finding minimizing &optional into)
  (defclause (finding expr minimizing min-expr &optional into variable)
    "Return value which minimizes expression"
    (return-find-extremum-code expr min-expr variable :min))
***************
*** 3206,3212 ****
                                  (coerce ,collect-var ',result-type)))))))))))
  
  
! ;;; (COLLECT &optional INTO AT RESULT-TYPE)
  (defclause (collect expr &optional into var at (place 'end) 
                                   result-type (type 'list))
    "Collect into a list"
--- 3206,3212 ----
                                  (coerce ,collect-var ',result-type)))))))))))
  
  
! ;;; (collect &optional into at result-type)
  (defclause (collect expr &optional into var at (place 'end) 
                                   result-type (type 'list))
    "Collect into a list"
***************
*** 3221,3227 ****
  
  (defsynonym collecting collect)
  
! ;;; (ADJOINING &optional INTO AT TEST RESULT-TYPE)
  (defclause (adjoining expr &optional into var
                                     at (place 'end)
                                     test (test '#'eql)
--- 3221,3227 ----
  
  (defsynonym collecting collect)
  
! ;;; (adjoining &optional into at test result-type)
  (defclause (adjoining expr &optional into var
                                     at (place 'end)
                                     test (test '#'eql)
***************
*** 3255,3261 ****
  
  
  
! ;;; (NCONCING &optional INTO AT)
  (defclause (nconcing expr &optional into var at (place 'end))
    "Nconc into a list"
    (return-collection-code
--- 3255,3261 ----
  
  
  
! ;;; (nconcing &optional into at)
  (defclause (nconcing expr &optional into var at (place 'end))
    "Nconc into a list"
    (return-collection-code
***************
*** 3265,3271 ****
     :place place
     :one-element nil))
     
! ;;; (APPENDING &optional INTO AT)
  (defclause (appending expr &optional into var at (place 'end))
    "Append into a list"
    (return-collection-code
--- 3265,3271 ----
     :place place
     :one-element nil))
     
! ;;; (appending &optional into at)
  (defclause (appending expr &optional into var at (place 'end))
    "Append into a list"
    (return-collection-code
***************
*** 3276,3282 ****
     :place place
     :one-element nil))
  
! ;;; (UNIONING &optional INTO AT TEST)
  (defclause (unioning expr &optional into var at (place 'end) 
                                    test (test '#'eql))
    "Union into a list"
--- 3276,3282 ----
     :place place
     :one-element nil))
  
! ;;; (unioning &optional into at test)
  (defclause (unioning expr &optional into var at (place 'end) 
                                    test (test '#'eql))
    "Union into a list"
***************
*** 3294,3300 ****
      :place place
      :one-element nil))
  
! ;;; (NUNIONING &optional INTO AT TEST)
  (defclause (nunioning expr &optional into var at (place 'end) 
                                    test (test '#'eql))
    "Union into a list, destructively"
--- 3294,3300 ----
      :place place
      :one-element nil))
  
! ;;; (nunioning &optional into at test)
  (defclause (nunioning expr &optional into var at (place 'end) 
                                    test (test '#'eql))
    "Union into a list, destructively"
***************
*** 3313,3319 ****
      :one-element nil))
  
  
! ;;; (ACCUMULATE BY &optional INITIAL-VALUE INTO)
  (defclause (accumulate expr by op &optional initial-value init-val 
                                            into var-spec)
    "Generalized accumulation"
--- 3313,3319 ----
      :one-element nil))
  
  
! ;;; (accumulate by &optional initial-value into)
  (defclause (accumulate expr by op &optional initial-value init-val 
                                            into var-spec)
    "Generalized accumulation"
***************
*** 3344,3350 ****
  ;;; the save code can go in the step portion of the loop; but if there is a
  ;;; generator, the best we can do is use a flag for the first time.
  
! ;;; (FOR PREVIOUS &optional INITIALLY BACK)
  (defclause (for pvar previous var &optional initially (default nil default?)
                                            back (n-expr 1))
    "Previous value of a variable"
--- 3344,3350 ----
  ;;; the save code can go in the step portion of the loop; but if there is a
  ;;; generator, the best we can do is use a flag for the first time.
  
! ;;; (for previous &optional initially back)
  (defclause (for pvar previous var &optional initially (default nil default?)
                                            back (n-expr 1))
    "Previous value of a variable"
***************
*** 3401,3407 ****
  
  (defun make-save-vars (var n)
    (let ((list nil)
!       (string (format nil "SAVE-~a-" var)))
      (dotimes (i n)
        (let ((svar (make-var-and-default-binding string :using-type-of var)))
        (push svar list)))
--- 3401,3407 ----
  
  (defun make-save-vars (var n)
    (let ((list nil)
!       (string (format nil "~a-~a-" '#:save var)))
      (dotimes (i n)
        (let ((svar (make-var-and-default-binding string :using-type-of var)))
        (push svar list)))
***************
*** 3474,3480 ****
      init-code))
                        
  (defun make-post-save-var (var)
!   (make-var-and-default-binding (format nil "POST-SAVE-~a-" var) 
                                :using-type-of var))
  
  
--- 3474,3480 ----
      init-code))
                        
  (defun make-post-save-var (var)
!   (make-var-and-default-binding (format nil "~a-~a-" '#:post-save var) 
                                :using-type-of var))
  
  
***************
*** 3567,3573 ****
  
  (defvar *genvar-counter* 0)
  
! (defun genvar (&optional (string "TEMP"))
    (prog1 (make-symbol (format nil "~a~d" string *genvar-counter*))
         (incf *genvar-counter*)))
      
--- 3567,3573 ----
  
  (defvar *genvar-counter* 0)
  
! (defun genvar (&optional (string (symbol-name '#:temp)))
    (prog1 (make-symbol (format nil "~a~d" string *genvar-counter*))
         (incf *genvar-counter*)))
      
Only in ../iterate-20111001-darcs/: iterate.lisp~
diff -rc iterate-20111001-darcs/iterate-test.lisp 
../iterate-20111001-darcs/iterate-test.lisp
*** iterate-20111001-darcs/iterate-test.lisp    2011-10-02 01:17:06.000000000 
+1000
--- ../iterate-20111001-darcs/iterate-test.lisp 2011-11-01 22:48:16.000000000 
+1100
***************
*** 346,357 ****
    (()()))
  
  (deftest in-packages.generator-access
!     (let ((iter-syms (iterate (generate (sym access) in-packages (list 
(find-package "COMMON-LISP")))
                              (repeat 1)
                              (next sym)
                              (collect (list sym access)))))
        (equal (multiple-value-list
!             (find-symbol (symbol-name (caar iter-syms)) "COMMON-LISP"))
             (car iter-syms)))
    t)
  
--- 346,357 ----
    (()()))
  
  (deftest in-packages.generator-access
!     (let ((iter-syms (iterate (generate (sym access) in-packages (list 
(find-package :common-lisp)))
                              (repeat 1)
                              (next sym)
                              (collect (list sym access)))))
        (equal (multiple-value-list
!             (find-symbol (symbol-name (caar iter-syms)) :common-lisp))
             (car iter-syms)))
    t)
  
***************
*** 1494,1505 ****
    14)
  
  (deftest defmacro-clause.1
!     (defmacro-clause (multiply.clause expr &optional INTO var)
        "from testsuite"
        `(reducing ,expr by #'* into ,var initial-value 1))
    ;; A better return value would be the exact list usable with remove-clause
    ;; The next version shall do that
!   (multiply.clause expr &optional INTO var))
  
  (deftest multiply.clause
      (iter (for el in '(1 2 3 4))
--- 1494,1505 ----
    14)
  
  (deftest defmacro-clause.1
!     (defmacro-clause (multiply.clause expr &optional into var)
        "from testsuite"
        `(reducing ,expr by #'* into ,var initial-value 1))
    ;; A better return value would be the exact list usable with remove-clause
    ;; The next version shall do that
!   (multiply.clause expr &optional into var))
  
  (deftest multiply.clause
      (iter (for el in '(1 2 3 4))
***************
*** 1507,1522 ****
    24)
  
  (deftest remove-clause.1
!     (iter::remove-clause '(multiply.clause &optional INTO))
    t)
  
  (deftest remove-clause.2
      (values
       (ignore-errors
!       (iter::remove-clause '(multiply.clause &optional INTO))))
    nil)
  
! (iter:defmacro-clause (for var IN-WHOLE-VECTOR.clause v)
    "All the elements of a vector (disregards fill-pointer)"
    (let ((vect (gensym "VECTOR"))
          (index (gensym "INDEX")))
--- 1507,1522 ----
    24)
  
  (deftest remove-clause.1
!     (iter::remove-clause '(multiply.clause &optional into))
    t)
  
  (deftest remove-clause.2
      (values
       (ignore-errors
!       (iter::remove-clause '(multiply.clause &optional into))))
    nil)
  
! (iter:defmacro-clause (for var in-whole-vector.clause v)
    "All the elements of a vector (disregards fill-pointer)"
    (let ((vect (gensym "VECTOR"))
          (index (gensym "INDEX")))
***************
*** 1526,1532 ****
         (for ,var = (aref ,vect ,index)))))
  
  (deftest in-whole-vector.clause
!     (iter (for i IN-WHOLE-VECTOR.clause (make-array 3 :fill-pointer 2
                                         :initial-contents '(1 2 3)))
          (collect i))
    (1 2 3))
--- 1526,1532 ----
         (for ,var = (aref ,vect ,index)))))
  
  (deftest in-whole-vector.clause
!     (iter (for i in-whole-vector.clause (make-array 3 :fill-pointer 2
                                         :initial-contents '(1 2 3)))
          (collect i))
    (1 2 3))
***************
*** 1537,1543 ****
          (collect i))
    (1 2))
  
! (iter:defmacro-driver (for var IN-WHOLE-VECTOR v)
    "All the elements of a vector (disregards fill-pointer)"
     (let ((vect (gensym "VECTOR"))
           (end (gensym "END"))
--- 1537,1543 ----
          (collect i))
    (1 2))
  
! (iter:defmacro-driver (for var in-whole-vector v)
    "All the elements of a vector (disregards fill-pointer)"
     (let ((vect (gensym "VECTOR"))
           (end (gensym "END"))
***************
*** 1552,1571 ****
                                 (aref ,vect ,index))))))
  
  (deftest in-whole-vector.driver
!     (iter (for i IN-WHOLE-VECTOR (make-array '(3) :fill-pointer 2
                                             :initial-contents '(1 2 3)))
          (collect i))
    (1 2 3))
  
  (deftest in-whole-vector.generate
!     (iter (generating i IN-WHOLE-VECTOR (make-array '(3) :fill-pointer 2
                                                    :initial-contents '(1 2 3)))
          (collect (next i)))
    (1 2 3))
  
  (deftest defclause-sequence
      (progn
!       (iter:defclause-sequence IN-WHOLE-VECTOR.seq INDEX-OF-WHOLE-VECTOR
        :access-fn 'aref
        :size-fn '#'(lambda (v) (array-dimension v 0))
        :sequence-type 'vector
--- 1552,1571 ----
                                 (aref ,vect ,index))))))
  
  (deftest in-whole-vector.driver
!     (iter (for i in-whole-vector (make-array '(3) :fill-pointer 2
                                             :initial-contents '(1 2 3)))
          (collect i))
    (1 2 3))
  
  (deftest in-whole-vector.generate
!     (iter (generating i in-whole-vector (make-array '(3) :fill-pointer 2
                                                    :initial-contents '(1 2 3)))
          (collect (next i)))
    (1 2 3))
  
  (deftest defclause-sequence
      (progn
!       (iter:defclause-sequence in-whole-vector.seq index-of-whole-vector
        :access-fn 'aref
        :size-fn '#'(lambda (v) (array-dimension v 0))
        :sequence-type 'vector
***************
*** 1578,1597 ****
    t)
  
  (deftest in-whole-vector.seq
!     (iter (for i IN-WHOLE-VECTOR.seq (make-array '(3) :fill-pointer 2
                                                 :initial-contents '(1 2 3)))
          (collect i))
    (1 2 3))
  
  (deftest in-whole-vector.seq.index
!     (iter (for i INDEX-OF-WHOLE-VECTOR
               (make-array 3 :fill-pointer 2 :initial-contents '(1 2 3)))
          (for j previous i :initially 9)
          (collect (list j i)))
    ((9 0)(0 1)(1 2)))
  
  (deftest in-whole-vector.seq.with-index
!     (iter (for e IN-WHOLE-VECTOR.seq
               (make-array '(3) :fill-pointer 2 :initial-contents '(a b c))
               :with-index i)
          (for j previous i :initially 9)
--- 1578,1597 ----
    t)
  
  (deftest in-whole-vector.seq
!     (iter (for i in-whole-vector.seq (make-array '(3) :fill-pointer 2
                                                 :initial-contents '(1 2 3)))
          (collect i))
    (1 2 3))
  
  (deftest in-whole-vector.seq.index
!     (iter (for i index-of-whole-vector
               (make-array 3 :fill-pointer 2 :initial-contents '(1 2 3)))
          (for j previous i :initially 9)
          (collect (list j i)))
    ((9 0)(0 1)(1 2)))
  
  (deftest in-whole-vector.seq.with-index
!     (iter (for e in-whole-vector.seq
               (make-array '(3) :fill-pointer 2 :initial-contents '(a b c))
               :with-index i)
          (for j previous i :initially 9)
***************
*** 1599,1605 ****
    ((9 0 a)(0 1 b)(1 2 c)))
  
  (deftest in-whole-vector.seq.generate
!     (iter (generate e IN-WHOLE-VECTOR.seq
               (make-array 3 :fill-pointer 2 :initial-contents '(a b c))
               :with-index i)
          (collect (list (next e) e i)))
--- 1599,1605 ----
    ((9 0 a)(0 1 b)(1 2 c)))
  
  (deftest in-whole-vector.seq.generate
!     (iter (generate e in-whole-vector.seq
               (make-array 3 :fill-pointer 2 :initial-contents '(a b c))
               :with-index i)
          (collect (list (next e) e i)))
***************
*** 1612,1618 ****
  ;; - Do not use (finally (RETURN ,winner)) either, as that would
  ;;   always return accumulated value, even in case of ... INTO nil.
  (deftest defmacro-clause.2
!     (defmacro-clause (FINDING expr MAXING func &optional INTO var)
        "Iterate paper demo example"
        (let ((max-val (gensym "MAX-VAL"))
            (temp1 (gensym "EL"))
--- 1612,1618 ----
  ;; - Do not use (finally (RETURN ,winner)) either, as that would
  ;;   always return accumulated value, even in case of ... INTO nil.
  (deftest defmacro-clause.2
!     (defmacro-clause (finding expr maxing func &optional into var)
        "Iterate paper demo example"
        (let ((max-val (gensym "MAX-VAL"))
            (temp1 (gensym "EL"))
***************
*** 1626,1632 ****
            (when (or (null ,max-val) (> ,temp2 ,max-val))
              (setq ,winner ,temp1 ,max-val ,temp2)))
          #|(finally (return ,winner))|# )))
!   (FINDING expr MAXING func &optional INTO var))
  
  (deftest maxing.1
      (iter (for i in-vector #(1 5 3))
--- 1626,1632 ----
            (when (or (null ,max-val) (> ,temp2 ,max-val))
              (setq ,winner ,temp1 ,max-val ,temp2)))
          #|(finally (return ,winner))|# )))
!   (finding expr maxing func &optional into var))
  
  (deftest maxing.1
      (iter (for i in-vector #(1 5 3))
Only in ../iterate-20111001-darcs/: iterate-test.lisp~

_______________________________________________
iterate-devel site list
iterate-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/iterate-devel

Reply via email to