control-flow.lisp - clic - Clic is an command line interactive client for gopher written in Common LISP
 (HTM) git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
       control-flow.lisp (1227B)
       ---
            1 (in-package :alexandria-2)
            2 
            3 (defun line-up-iter (thread-first-p acc forms)
            4   "Iterative implementation for `thread-iter'.
            5 
            6 The THREAD-FIRST-P decides where to thread the FORMS, accumulating in ACC."
            7   (if forms
            8       (line-up-iter thread-first-p
            9                    (let ((form (car forms)))
           10                      (if (listp form)
           11                          (if thread-first-p
           12                              (apply #'list (car form) acc (cdr form))
           13                              (append form (cons acc nil)))
           14                          (list form acc)))
           15                    (cdr forms))
           16       acc))
           17 
           18 (defmacro line-up-first (&rest forms)
           19   "Lines up FORMS elements as the first argument of their successor.
           20 Example:
           21 
           22  (thread-first
           23    5
           24    (+ 20)
           25    /
           26    (+ 40))
           27 
           28 is equivalent to:
           29 
           30  (+ (/ (+ 5 20)) 40)
           31 
           32 Note how the single '/ got converted into a list before
           33 threading."
           34   (line-up-iter t (car forms) (cdr forms)))
           35 
           36 (defmacro line-up-last (&rest forms)
           37   "Lines up FORMS elements as the last argument of their successor.
           38 Example:
           39 
           40  (thread-last
           41    5
           42    (+ 20)
           43    /
           44    (+ 40))
           45 
           46 is equivalent to:
           47 
           48     (+ 40 (/ (+ 20 5)))
           49 
           50 Note how the single '/ got converted into a list before
           51 threading."
           52   (line-up-iter nil (car forms) (cdr forms)))