Fixed :final and make to, by => :to :by
I had a bug. I had an inconsistency. Don't worry. All is fixed.
This commit is contained in:
parent
f6d7b01793
commit
5847bd21d4
3 changed files with 22 additions and 16 deletions
|
@ -35,11 +35,13 @@
|
||||||
;; auxiliary auxiliary syntax
|
;; auxiliary auxiliary syntax
|
||||||
;; for vectoring
|
;; for vectoring
|
||||||
:length :fill
|
:length :fill
|
||||||
|
;;for up-from and down-to
|
||||||
|
:to :by
|
||||||
;; Internal syntax. %acc is turned into :acc by the forify macro
|
;; Internal syntax. %acc is turned into :acc by the forify macro
|
||||||
;; it is used make it possible to report an error if :acc is used in
|
;; it is used make it possible to report an error if :acc is used in
|
||||||
;; one of the simple macros.
|
;; one of the simple macros.
|
||||||
%acc
|
%acc)
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
(include "goof/iterators.scm")
|
(include "goof/iterators.scm")
|
||||||
|
|
12
goof.scm
12
goof.scm
|
@ -50,6 +50,7 @@
|
||||||
|
|
||||||
:when :unless :break :final :let :let* :subloop :for :acc
|
:when :unless :break :final :let :let* :subloop :for :acc
|
||||||
:length :fill
|
:length :fill
|
||||||
|
:to :by
|
||||||
|
|
||||||
in
|
in
|
||||||
in-list
|
in-list
|
||||||
|
@ -178,11 +179,14 @@
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((_ loop-name final-fun () ((v s) ...))
|
((_ loop-name final-fun () ((v s) ...))
|
||||||
(loop-name s ...))
|
(loop-name s ...))
|
||||||
|
;; This is somewhat of an ugly thing. We want to test (or user-finals ...)
|
||||||
|
;; before updating the loop variables, but we want to update the loop variables
|
||||||
|
;; before running the final-fun.
|
||||||
((_ loop-name final-fun (user-finals ...) ((v s) ...))
|
((_ loop-name final-fun (user-finals ...) ((v s) ...))
|
||||||
(let ((v s) ...)
|
(if (or user-finals ...)
|
||||||
(if (or user-finals ...)
|
(let ((v s) ...)
|
||||||
final-fun
|
final-fun)
|
||||||
(loop-name v ...))))))
|
(loop-name s ...)))))
|
||||||
|
|
||||||
|
|
||||||
(define (syntax->list stx)
|
(define (syntax->list stx)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
;; iterators.scm - iterators for goof-loop.
|
;; iterators.scm - iterators for goof-loop.
|
||||||
;;
|
;;
|
||||||
;; Copyright 2020 Linus Björnstam
|
;; Copyright 2020-2021 Linus Björnstam
|
||||||
;; Copyright 2000-2015 Alex Shinn (original author of chibi-loop)
|
;; Copyright 2000-2015 Alex Shinn (original author of chibi-loop)
|
||||||
;; All rights reserved.
|
;; All rights reserved.
|
||||||
;;
|
;;
|
||||||
|
@ -258,18 +258,18 @@
|
||||||
(g))))))
|
(g))))))
|
||||||
|
|
||||||
(define-syntax up-from
|
(define-syntax up-from
|
||||||
(syntax-rules (to by)
|
(syntax-rules (:to :by)
|
||||||
((up-from :for (() . args) next . rest)
|
((up-from :for (() . args) next . rest)
|
||||||
(up-from :for ((var) . args) next . rest))
|
(up-from :for ((var) . args) next . rest))
|
||||||
((up-from :for ((var) (start (to limit) (by step))) next . rest)
|
((up-from :for ((var) (start (:to limit) (:by step))) next . rest)
|
||||||
(next ((s start) (l limit) (e step))
|
(next ((s start) (l limit) (e step))
|
||||||
((var s (+ var e)))
|
((var s (+ var e)))
|
||||||
((>= var l))
|
((>= var l))
|
||||||
() () . rest))
|
() () . rest))
|
||||||
((up-from :for ((var) (start (to limit))) next . rest)
|
((up-from :for ((var) (start (:to limit))) next . rest)
|
||||||
(next ((s start) (l limit)) ((var s (+ var 1)))
|
(next ((s start) (l limit)) ((var s (+ var 1)))
|
||||||
((>= var l)) () () . rest))
|
((>= var l)) () () . rest))
|
||||||
((up-from :for ((var) (start (by step))) next . rest)
|
((up-from :for ((var) (start (:by step))) next . rest)
|
||||||
(next ((s start) (e step))
|
(next ((s start) (e step))
|
||||||
((var s (+ var e))) () () () . rest))
|
((var s (+ var e))) () () () . rest))
|
||||||
((up-from :for ((var) (start)) next . rest)
|
((up-from :for ((var) (start)) next . rest)
|
||||||
|
@ -282,18 +282,18 @@
|
||||||
(up-from :for ((var) (start limit 1)) next . rest))))
|
(up-from :for ((var) (start limit 1)) next . rest))))
|
||||||
|
|
||||||
(define-syntax down-from
|
(define-syntax down-from
|
||||||
(syntax-rules (to by)
|
(syntax-rules (:to :by)
|
||||||
((down-from :for (() . args) next . rest)
|
((down-from :for (() . args) next . rest)
|
||||||
(down-from :for ((var) . args) next . rest))
|
(down-from :for ((var) . args) next . rest))
|
||||||
((down-from :for ((var) (start (to limit) (by step))) next . rest)
|
((down-from :for ((var) (start (:to limit) (:by step))) next . rest)
|
||||||
(next ((s start) (l limit) (e step))
|
(next ((s start) (l limit) (e step))
|
||||||
((var (- s e) (- var e)))
|
((var (- s e) (- var e)))
|
||||||
((< var l))
|
((< var l))
|
||||||
() () . rest))
|
() () . rest))
|
||||||
((down-from :for ((var) (start (to limit))) next . rest)
|
((down-from :for ((var) (start (:to limit))) next . rest)
|
||||||
(next ((s start) (l limit)) ((var (- s 1) (- var 1)))
|
(next ((s start) (l limit)) ((var (- s 1) (- var 1)))
|
||||||
((< var l)) () () . rest))
|
((< var l)) () () . rest))
|
||||||
((down-from :for ((var) (start (by step))) next . rest)
|
((down-from :for ((var) (start (:by step))) next . rest)
|
||||||
(next ((s start) (e step)) ((var (- s e) (- var e)))
|
(next ((s start) (e step)) ((var (- s e) (- var e)))
|
||||||
() () () . rest))
|
() () () . rest))
|
||||||
((down-from :for ((var) (start)) next . rest)
|
((down-from :for ((var) (start)) next . rest)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue