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. */
