/src/basic-macros/source.scm

http://github.com/dharmatech/abstracting · Scheme · 37 lines · 21 code · 10 blank · 6 comment · 0 complexity · a444e5936bc9f0e898ebf06564b904bb MD5 · raw file

  1. ;; (define-macro (when test . body)
  2. ;; `(if ,test (begin ,@body)))
  3. ;; (define-macro (push! list elt)
  4. ;; `(set! ,list (cons ,elt ,list)))
  5. (define-syntax when
  6. (syntax-rules ()
  7. ((when test expr ...)
  8. (if test
  9. (begin
  10. expr
  11. ...)))))
  12. (define-syntax push!
  13. (syntax-rules ()
  14. ((push! list elt)
  15. (set! list (cons elt list)))))
  16. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  17. (define-syntax list-push!
  18. (syntax-rules ()
  19. ((list-push! list elt)
  20. (set! list (cons elt list)))))
  21. (define-syntax list-pop!
  22. (syntax-rules ()
  23. ((list-pop! list)
  24. (let ((elt (car list)))
  25. (set! list (cdr list))
  26. elt))))
  27. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;