Changeset 4913


Ignore:
Timestamp:
11/29/03 06:03:20 (18 years ago)
Author:
piso
Message:

DOTIMES

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/boot.lisp

    r4903 r4913  
    22;;;
    33;;; Copyright (C) 2003 Peter Graves
    4 ;;; $Id: boot.lisp,v 1.129 2003-11-28 05:57:25 piso Exp $
     4;;; $Id: boot.lisp,v 1.130 2003-11-29 06:03:20 piso Exp $
    55;;;
    66;;; This program is free software; you can redistribute it and/or
     
    317317       (cond ,@(rest clauses))))))))
    318318
    319 ;;; DOTIMES (from CMUCL)
    320319(defmacro dotimes ((var count &optional (result nil)) &body body)
    321   (cond ((numberp count)
    322          `(do ((,var 0 (1+ ,var)))
    323               ((>= ,var ,count) ,result)
    324             ,@body))
    325         (t (let ((v1 (gensym)))
    326              `(do ((,var 0 (1+ ,var)) (,v1 ,count))
    327                   ((>= ,var ,v1) ,result)
    328                 ,@body)))))
    329 
     320  (if (numberp count)
     321      (let ((tag (gensym)))
     322        `(let ((,var 0))
     323           (block nil
     324             (tagbody
     325              ,tag
     326              (if (>= ,var ,count)
     327                  (return-from nil (progn ,result)))
     328              ,@body
     329              (setq ,var (1+ ,var))
     330              (go ,tag)))))
     331      (let ((limit (gensym))
     332            (tag (gensym)))
     333        `(let ((,limit ,count)
     334               (,var 0))
     335           (block nil
     336             (tagbody
     337              ,tag
     338              (if (>= ,var ,limit)
     339                  (return-from nil (progn ,result)))
     340              ,@body
     341              (setq ,var (1+ ,var))
     342              (go ,tag)))))))
    330343
    331344;;; DOLIST (from CMUCL)
Note: See TracChangeset for help on using the changeset viewer.