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 <[EMAIL PROTECTED]> 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.
*/
/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/