;;; -*- lexical-binding: t -*- ;; ;; ----------------------------------------------------------------------------- ;; this file: ;; https://dataswamp.org/~incal/emacs-init/ll/ll-palet.el ;; ----------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew (expand-file-name ".") 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 (cl-loop until (z left) do (sleep-for (** 2 -8))) finally return `(let ,binds ,@body))) (defun palet-primes (&optional beg end) (or beg (setf beg 1)) (or end (setf end (** 2 22))) (let ((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)))) ;; (el-pa-primes-num 10 100) (defun palet-primes-test (&optional beg end) (or beg (setf beg 1)) (or end (setf end (** 2 22))) (let* ((res) (tme (benchmark-elapse (setf res (palet-primes beg end))))) ($ "[palet done] %d %.2fs" res tme) tme)) ;; (palet-primes-test) (<- 'll-palet)