;;; -*- lexical-binding: t -*- ;; ;; ----------------------------------------------------------------------------- ;; this file: ;; https://dataswamp.org/~incal/emacs-init/ll/ll-palet.el ;; ----------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (require 'luki-lisp) ;; ----------------------------------------------------------------------------- (-> 'benchmark) (-> 'll-el-pa) ;; ----------------------------------------------------------------------------- (defmacro palet (binds &rest body) (cl-loop with left = (--- binds) for (var val) in binds for elisp = (@f "(princ %s)" val) do (make-process :name (@f "palet-%s" var) :buffer nil :command `("emacs" "--batch" "-f" ,elisp) :sentinel (L (_ str) (setf var str) (-- left))) finally do (cl-loop until (z left) do (sleep-for (** 2 -8))) finally return `(let ,binds ,@body))) ;; ----------------------------------------------------------------------------- (defun palet-primes (&optional beg end) (let* ((beg (or beg 1)) (end (or end (** 2 22))) (prt (/ (- end beg) 8))) (palet ((p1 (el-pa-primes-num #1=beg #2=(+ #1# prt))) (p2 (el-pa-primes-num #1=(1+ #2#) #2=(+ #1# prt))) (p3 (el-pa-primes-num #1=(1+ #2#) #2=(+ #1# prt))) (p4 (el-pa-primes-num #1=(1+ #2#) #2=(+ #1# prt))) (p5 (el-pa-primes-num #1=(1+ #2#) #2=(+ #1# prt))) (p6 (el-pa-primes-num #1=(1+ #2#) #2=(+ #1# prt))) (p7 (el-pa-primes-num #1=(1+ #2#) #2=(+ #1# prt))) (p8 (el-pa-primes-num #1=(1+ #2#) end))) (+ p1 p2 p3 p4 p5 p6 p7 p8)))) ;; ----------------------------------------------------------------------------- (defun palet-primes-test (&optional beg end silent) (let* ((res) (beg (or beg 1)) (end (or end (** 2 22))) (tme (benchmark-elapse (setf res (palet-primes beg end))))) (unless silent ($ "[palet done] %d %.4f" res tme)) tme)) ;; ----------------------------------------------------------------------------- (<- 'll-palet) ;; -----------------------------------------------------------------------------