Looking for Programmers
Jonathan Duncan
jonathan at jkdwebmagic.com
Sat Mar 11 00:08:51 MST 2006
Holy Moly! I took a LISP class in college once, but this is the first
time I have seen a LISP program in use. Good work!
Jonathan
On Fri, 10 Mar 2006, Daniel C. wrote:
> 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.
>> */
>>
>
> /*
> 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