diff options
author | Richard M. Stallman <rms@gnu.org> | 2000-01-21 03:37:07 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 2000-01-21 03:37:07 +0000 |
commit | 04be976f6786cdf36827a10a9ca0883124ddbeec (patch) | |
tree | 3645eac63d799b0c6421e0d344f95a6090fe8349 /lisp/emacs-lisp | |
parent | 5bb6f079e54ceeec1794a287f793e6b47f3575f1 (diff) | |
download | emacs-04be976f6786cdf36827a10a9ca0883124ddbeec.tar.gz emacs-04be976f6786cdf36827a10a9ca0883124ddbeec.tar.bz2 emacs-04be976f6786cdf36827a10a9ca0883124ddbeec.zip |
Undo previous change.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/cl-macs.el | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 70069d77eaf..af2d31cf216 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -1122,6 +1122,32 @@ Format is: (do* ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" (apply 'append sets))))))) (or (cdr endtest) '(nil))))) +(defmacro dolist (spec &rest body) + "(dolist (VAR LIST [RESULT]) BODY...): loop over a list. +Evaluate BODY with VAR bound to each `car' from LIST, in turn. +Then evaluate RESULT to get return value, default nil." + (let ((temp (gensym "--dolist-temp--"))) + (list 'block nil + (list* 'let (list (list temp (nth 1 spec)) (car spec)) + (list* 'while temp (list 'setq (car spec) (list 'car temp)) + (append body (list (list 'setq temp + (list 'cdr temp))))) + (if (cdr (cdr spec)) + (cons (list 'setq (car spec) nil) (cdr (cdr spec))) + '(nil)))))) + +(defmacro dotimes (spec &rest body) + "(dotimes (VAR COUNT [RESULT]) BODY...): loop a certain number of times. +Evaluate BODY with VAR bound to successive integers from 0, inclusive, +to COUNT, exclusive. Then evaluate RESULT to get return value, default +nil." + (let ((temp (gensym "--dotimes-temp--"))) + (list 'block nil + (list* 'let (list (list temp (nth 1 spec)) (list (car spec) 0)) + (list* 'while (list '< (car spec) temp) + (append body (list (list 'incf (car spec))))) + (or (cdr (cdr spec)) '(nil)))))) + (defmacro do-symbols (spec &rest body) "(dosymbols (VAR [OBARRAY [RESULT]]) BODY...): loop over all symbols. Evaluate BODY with VAR bound to each interned symbol, or to each symbol |