Looking for Programmers

Daniel C. dcrookston at gmail.com
Fri Mar 10 23:56:15 MST 2006


Looks like a situation in which the bash shell is mightier than the
lambda calculus.

On 3/10/06, Levi Pearson <levi at cold.org> wrote:
> Not looking for a job, but I thought I'd give an example program
> written in Common Lisp for fun.
>
> ;;;;
> ;;;; A Common Lisp program to find the unique words in a text file that
> ;;;; are also in a dictionary word list
> ;;;;
>
> (defparameter *words-file* "/usr/share/dict/words")
>
> (defparameter *whitespace-chars*
>    '(#\Newline #\Space #\Tab #\Page #\Return #\Linefeed))
>
> (defvar *words*
>    (with-open-file (words *words-file* :direction :input)
>      (let ((hash (make-hash-table :test 'equal)))
>        (loop (let ((line (read-line words nil)))
>               (if line
>                   (setf (gethash line hash) t)
>                   (return))))
>        hash)))
>
> (defun present-in-hash (key hash)
>    (second
>     (multiple-value-list
>      (gethash key hash))))
>
> (defun read-word (stream)
>    (with-output-to-string (s)
>      ;; munch whitespace before
>      (loop as c = (peek-char nil stream nil)
>         while (and c (member c *whitespace-chars*))
>         do (read-char stream))
>      ;; copy non-whitespace to output
>      (loop as c = (peek-char nil stream nil)
>         while (and c (not (member c *whitespace-chars*)))
>         do (write-char (read-char stream) s))))
>
> (defun find-unique-words (filename)
>    (with-open-file (doc-stream filename :direction :input)
>      (let ((word-count (make-hash-table :test 'equal)))
>        ;; Count the words
>        (loop as w = (string-downcase (read-word doc-stream))
>            while (not (string= w ""))
>            do (when (present-in-hash w *words*)
>                 (if (present-in-hash w word-count)
>                     (incf (gethash w word-count))
>                     (setf (gethash w word-count) 1))))
>        ;; Collect the unique words
>        (loop for word being the hash-key of word-count
>            for count = (gethash word word-count)
>            when (= count 1) collect word))))
>
>
> /*
> PLUG: http://plug.org, #utah on irc.freenode.net
> Unsubscribe: http://plug.org/mailman/options/plug
> Don't fear the penguin.
> */
>



More information about the PLUG mailing list