lisp-random / dopplerize.lisp

;;;; dopplerize.lisp
;;;; Copyright (c) 2012 ROBERT SMITH

(defun dopplerize (string &key (growth-function 'identity))
  (labels ((spaces (n)
             (make-string (floor n) :initial-element #\Space)))
    (with-output-to-string (s)
      (loop :with length := (length string)
            :for c :across string
            :for i :from 1
            :do (if (= i length) ; last char?
                    (format s "~C" c)
                    (format s "~C~A" c (spaces (funcall growth-function i))))))))

(defun space-free-modified-dopplerize (string &key (growth-function 'identity))
  (dopplerize (remove #\Space string) :growth-function growth-function))

(defun triangle (n &optional (period 8))
  (let ((m (mod n period)))
    (if (> m (floor period 2))
        (- period m)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.