(defun frequency (files) (let ((v (make-array 127 :initial-element 0))) (dolist (file files v) (with-open-file (s file :direction :input) (loop as c = (read-char s nil) while (characterp c) if (< (char-code c) 127) do (incf (svref v (char-code c)))))))) (defun print-frequency (files) (let ((v (frequency files))) (format t "~{~4@{~10S ~6D~^ ~}~%~}" (loop for n across v and i from 0 if (plusp n) nconc (list (code-char i) n))) (format t "~&Total: ~D characters~%" (reduce #'+ v))))