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