;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 122.9
;;; Reason:
;;;  ADDED DOSEQUENCE MACRO -GJC
;;; Written 29-Jun-87 09:35:45 by khh at site LMI Cambridge
;;; while running on Lambda Four B from band 2
;;; with Experimental System 122.8, Experimental Local-File 73.0, Experimental FILE-Server 22.0, Experimental Unix-Interface 11.0, Experimental Tape 17.1, Experimental Tiger 26.0, Experimental KERMIT 33.0, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, microcode 1742, SDU Boot Tape 3.7, SDU ROM 102, 122.8.


(GLOBALIZE "DOSEQUENCE")

(IMPORT (INTERN "DOSEQUENCE" "GLOBAL") "LISP")


; From file DJ: L.SYS2; LMMAC.LISP#457 at 29-Jun-87 09:35:46
#10R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; LMMAC  "

(defmacro dosequence ((var sequence &OPTIONAL RESULTFORM) &BODY BODY)
  "Iterate BODY with VAR bound to successive ELT's of SEQUENCE"
  ;; not common lisp, but useful like NIL's DOVECTOR
  (LET ((ITERATION-VAR (GENTEMP "VAR"))
	(LENGTH-VAR (GENTEMP "LENGTH"))
	(SEQUENCE-VAR (GENTEMP "SEQUENCE")))
    `(LET ((,SEQUENCE-VAR ,SEQUENCE))
       (DO ((,ITERATION-VAR 0 (1+ ,ITERATION-VAR))
	    (,LENGTH-VAR (LENGTH ,SEQUENCE-VAR))
	    (,VAR))
	   ((= ,ITERATION-VAR ,LENGTH-VAR) ,RESULTFORM)
	 (SETQ ,VAR (ELT ,SEQUENCE-VAR ,ITERATION-VAR))
	 ,@BODY))))

))
