[plt-scheme] stupid Swindle tricks
Candidates for swindle/misc.ss, in decreasing order of usefulness:
  (defsyntax* set-if!
    (syntax-rules ()
      ((_ condition then-place else-place val)
       (if condition (set! then-place val) (set! else-place val)))))
  (defsyntax* last-of
    (syntax-rules ()
      ((_ successor first clause ...)
       (collect (x first (successor x)) clause ...))))
  (define* (nth-of n successor first)
    (last-of successor first (i <- 0 ..< n)))
  (defsyntax* set-nth-of!
    (syntax-rules ()
      ((_ n successor first val)
       (let ((nn n))
	 (set! (if (zero? nn)
		   first
		   (successor (nth-of (1- nn) successor first)))
	       val)))))
  (defsyntax* push-at-end!
    (syntax-rules ()
      ((_ val place)
       (set! (nth-of (length place) cdr place) (list val)))))
  (defsyntax* pop-at-end!
    (syntax-rules ()
      ((_ place)
       (begin0 (last place)
	       (set! (nth-of (1- (length place)) cdr place) null)))))
--dougorleans at gmail.com