Component steel-bazooka

You are here: All Systems / cliki-bot / steel-bazooka

(defpackage :steel-bazooka (:use :cl) (:export :steel-whatever))
(in-package :steel-bazooka)

(defparameter *words* nil)

(defun read-words ()
  (loop for char = #\a then (code-char (1+ (char-code char)))
       while (char<= char #\z)
       do (push (cons char (make-array '(0) :adjustable t :fill-pointer 0 :element-type 'string)) *words*)
)

  (with-open-file (f (merge-pathnames "words"
                                      (make-pathname :directory (pathname-directory
                                                                 (asdf:component-pathname
                                                                  (asdf:find-system :cliki-bot)
)
)
)
)
:direction :input
)

    (loop for line = (read-line f nil nil)
         while line
       if (> (length line) 2)
       do (if (char<= #\a (elt line 0) #\z)
              (vector-push-extend line (cdr (assoc (elt line 0) *words* :test #'eql)))
)
)
)
)


(defun random-elt (seq)
  (elt seq (random (length seq)))
)


(defun steel-whatever (&key (letters "sb") (suffix " Common Lisp"))
  (format nil "~:(~{~A~^ ~}~)~A"
          (map 'list
               (lambda (letter)
                 (random-elt (cdr (assoc letter *words* :test #'eql)))
)

               letters
)

          (if suffix suffix "")
)
)


(read-words)

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.