Changeset 14588 in project


Ignore:
Timestamp:
05/11/09 12:07:04 (10 years ago)
Author:
Alex Shinn
Message:

adding patch from zbigniew for up-from & down-from
with steps but no limit, and fixed reverse while/until
tests.

Location:
release/4/fast-loop/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • release/4/fast-loop/trunk/fast-loop.meta

    r14322 r14588  
    44 (files "fast-loop.scm" "fast-loop.setup")
    55 (license "BSD")
     6 (needs matchable)
    67 (doc-from-wiki)
    78 (category lang-exts)
  • release/4/fast-loop/trunk/fast-loop.scm

    r14322 r14588  
    135135     (%loop name l (vars ... (var init var)) c r f (rest ...) . body))
    136136    ;; user-specified terminators
     137    ((_ name l vars (checks ...) r f ((until expr) rest ...) . body)
     138     (%loop name l vars (checks ... expr) r f (rest ...) . body))
    137139    ((_ name l vars (checks ...) r f ((while expr) rest ...) . body)
    138      (%loop name l vars (checks ... expr) r f (rest ...) . body))
    139     ((_ name l vars (checks ...) r f ((until expr) rest ...) . body)
    140140     (%loop name l vars (checks ... (not expr)) r f (rest ...) . body))
    141141    ;; specify a default done?
     
    327327     (next ((s start) (l limit) (e step))
    328328           ((var s (+ var e)))
    329            ((>= var limit))
     329           ((>= var l))
    330330           ()
    331331           ()
     
    334334     (next ((s start) (l limit))
    335335           ((var s (+ var 1)))
    336            ((>= var limit))
     336           ((>= var l))
    337337           ()
    338338           ()
    339339           . rest))
    340340    ((up-from ((var) (start (by step))) next . rest)
    341      (next ((s start) (l limit) (e step)) ((var s (+ var e))) () () () . rest))
     341     (next ((s start) (e step)) ((var s (+ var e))) () () () . rest))
     342    ((up-from ((var) (start)) next . rest)
     343     (next ((s start)) ((var s (+ var 1))) () () () . rest))
    342344    ))
    343345
     
    349351     (next ((s start) (l limit) (e step))
    350352           ((var (- s e) (- var e)))
    351            ((< var limit))
     353           ((< var l))
    352354           ()
    353355           ()
     
    356358     (next ((s start) (l limit))
    357359           ((var (- s 1) (- var 1)))
    358            ((< var limit))
     360           ((< var l))
    359361           ()
    360362           ()
    361363           . rest))
    362364    ((down-from ((var) (start (by step))) next . rest)
    363      (next ((s start) (l limit) (e step)) ((var (- s e) (- var e))) () () ()
     365     (next ((s start) (e step)) ((var (- s e) (- var e))) () () ()
     366           . rest))
     367    ((down-from ((var) (start)) next . rest)
     368     (next ((s start)) ((var (- s 1) (- var 1))) () () ()
    364369           . rest))
    365370    ))
  • release/4/fast-loop/trunk/fast-loop.setup

    r14322 r14588  
    55 'fast-loop
    66 '("fast-loop.so" "fast-loop.import.so")
    7  '((version 0.2)))
     7 '((version 0.3)))
    88
  • release/4/fast-loop/trunk/test.scm

    r14322 r14588  
    136136    => res))
    137137
     138(test "while + up-from" '(5 6 7)
     139      (loop ((for i (up-from 5 (to 10)))
     140             (while (< i 8))
     141             (for res (listing i)))
     142        => res))
     143
     144(test "up-from by, open-ended" '(5 7 9)
     145  (loop ((for i (up-from 5 (by 2)))
     146         (while (< i 10))
     147         (for res (listing i)))
     148    => res))
     149
     150(test "up-from open-ended" '(5 6 7)
     151  (loop ((for i (up-from 5))
     152         (while (< i 8))
     153         (for res (listing i)))
     154    => res))
     155
     156(test "down-from by, open-ended" '(5 3 1)
     157  (loop ((for i (down-from 7 (by 2)))
     158         (until (< i 1))
     159         (for res (listing i)))
     160    => res))
     161
     162(test "down-from open-ended" '(4 3 2)
     163  (loop ((for i (down-from 5))
     164         (until (< i 2))
     165         (for res (listing i)))
     166    => res))
     167
    138168(test-end)
    139169
Note: See TracChangeset for help on using the changeset viewer.