1. 17 Jan, 2022 1 commit
  2. 25 Oct, 2021 2 commits
  3. 24 Oct, 2021 3 commits
  4. 22 Jul, 2021 1 commit
  5. 15 Mar, 2021 2 commits
  6. 13 Mar, 2021 1 commit
  7. 21 Aug, 2020 2 commits
  8. 06 Jul, 2020 1 commit
  9. 17 Jun, 2020 1 commit
  10. 12 May, 2020 2 commits
  11. 31 Mar, 2020 3 commits
  12. 27 Mar, 2020 4 commits
  13. 25 Mar, 2020 3 commits
  14. 16 Mar, 2020 1 commit
  15. 05 Mar, 2020 1 commit
    • Andrea Richiardi's avatar
      Introduce line-up-first and line-up-last macros · 2e399427
      Andrea Richiardi authored
      This patch introduces the line-up-first and line-up-last macros in
      control-flow.  The macros have been popularized by Clojure and afterwards
      adopted in Emacs Lisp (see thread-first and thread-last in subr-x.el).
      
      This implementation is a port of the latter, where we use a common
      line-up-iter(ative) tail recursive function for computing the results.  The
      choice of the full name was made in the spirit of the library, conservatively
      avoiding new syntax like -> or ->>.
      2e399427
  16. 04 Mar, 2020 7 commits
  17. 25 Jan, 2020 1 commit
  18. 10 Jan, 2020 1 commit
  19. 06 Dec, 2019 1 commit
    • Philipp Marek's avatar
      Merge branch 'master' into 'master' · 1224346a
      Philipp Marek authored
      Re-implement median function using the quick-select algorithm
      
      I wanted to submit a re-implementation of alexandria:median. Currently the function works by fully sorting the sequence, which has a complexity of O(n log n). This commit implements it as a special case of the quick select algorithm, which brings its complexity down to O(n).
      
      The new implementation is more complicated, though I think it's still simpler than some other algorithms in alexandria. Anyways, the performance gains are dramatic enough that I thought I'd at least submit the patch. I did some testing via the timing code below, and observed speedups of 5-10x even on sequences with just 100 elements.
      
      I could also provide the quick select algorithm as its own function if there's any interest, though it seems like this would have to go into the alexandria-2 branch.
      
      
      ```
      ;; Speed-testing function
      (defun test-median-speed (mag)
        (labels ((get-vec-median (vec)
                   (if (oddp (length vec))
                       (aref vec (ash (length vec) -1))
                       (* 1/2 (+ (aref vec (ash (length vec) -1))
                                 (aref vec (1- (ash (length vec) -1))))))))
          (let ((arr (loop for i from 0 upto (expt 10 mag) collect (random 1000000))))
            (assert (=
                     (time (get-vec-median (sort (alexandria:copy-sequence 'vector arr) #'<)))
                     (time (alexandria:median arr)))))))
      ```
      
      See merge request alexandria/alexandria!17
      1224346a
  20. 27 Nov, 2019 1 commit
  21. 29 May, 2019 1 commit
    • Philipp Marek's avatar
      Avoid duplicate logic in WHEN-LET* · 3b849bc0
      Philipp Marek authored and lovrolu's avatar lovrolu committed
      By using an explicit PROGN we can interpolate straight into the LET.
      The PROGN shouldn't matter, as the WHEN interferes with DECLAREs anyway.
      3b849bc0