home *** CD-ROM | disk | FTP | other *** search
Lisp/Scheme | 1988-04-07 | 997 b | 35 lines | [TEXT/ttxt] |
- ;; Larry Mulcahy 1988
- ;; iteration macros
-
- (provide 'iteration)
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; macro for
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defmacro for (var init max &rest body)
- (let ((loop-label (gensym))
- (result-label (gensym)))
- `(prog (,var)
- (setq ,var ,init)
- ,loop-label
- (setq ,result-label (progn ,@body))
- (if (>= ,var ,max) (return ,result-label))
- (setq ,var (1+ ,var))
- (go ,loop-label))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; macro while
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defmacro while (condition &rest body)
- (let ((loop-label (gensym))
- (result-label (gensym)))
- `(prog nil
- (setq ,result-label nil)
- ,loop-label
- (if ,condition
- (setq ,result-label (progn ,@body))
- (return ,result-label))
- (go ,loop-label))))
-