Plaster
New
List
Login
common-lisp
default
shinmera
2025.03.07 13:49:10
(defun cancer-rate (&key (dist (ql-dist:find-dist "quicklisp"))) (let* ((systems (ql-dist:provided-systems dist)) (cache (make-hash-table :test 'equal))) (labels ((really-poisoned-p (system) (or (loop for dep in (ql-dist:required-systems system) for sys = (ql-dist:find-system-in-dist dep dist) thereis (and sys (poisoned-p sys))) (progn (unless (ql-dist:installedp system) (ql-dist:install system)) (let ((file (ql-dist::installed-asdf-system-file system))) (with-open-file (s file) (loop for line = (read-line s NIL) while line thereis (search "Yukari Hafner" line))))))) (poisoned-p (system) (let* ((name (ql-dist:short-description system)) (hit (gethash name cache #1='#:miss))) (cond ((eql #1# hit) (setf (gethash name cache) NIL) ; Mark tentative (setf (gethash name cache) (really-poisoned-p system))) (T hit))))) (* 100.0 (/ (count-if #'poisoned-p systems) (length systems)))))) ;; (cancer-rate) => 19.97187
Raw
Annotate
Repaste