Fefe hat auf seinem Blog vor einer guten Woche folgenden Aufruf veröffentlicht:
Ich mache gerade einen kleinen Test, bei dem ihr mir helfen könnt, wenn ihr Lust habt. Es geht darum, eine vergleichsweise triviale Aufgabenstellung in Skriptsprachen zu implementieren. Die Aufgabenstellung ist: stdin lesen, in Wörter splitten, für die Wörter dann jeweils die Häufigkeit zählen, am Ende die Wörter mit Häufigkeiten nach letzteren sortiert ausgeben. Einfach genug, in perl ist das in unter 10 Zeilen ordentlich zu machen ...
Daher wäre es mir lieb, wenn mir jemand für die fehlenden Sprachen Sourcen zuschickt. Ich erwarte da jetzt nicht AppleScript oder so, aber C# wäre z.B. nett, und Tcl. Und vielleicht noch sowas wie LISP oder Scheme.
Mindestens Christoph und ich haben jeweils Lösungen in Common Lisp eingeschickt. Leider warten wir beide noch auf eine Antwort. Christoph hat seinen Code auf seinem Blog veröffentlicht. Ich tue hiermit dasselbe. Vielleicht interessiert sich ja jemand dafür.
(defun count-words (stream)
(let ((table (make-hash-table :test 'equal))
(word (make-array '(100)
:element-type 'character
:fill-pointer 0
:adjustable t)))
(loop for char = (read-char stream nil nil)
while char
when (not (member char '(#\Newline #\Space)))
do (setf (fill-pointer word) 1
(elt word 0) char)
(loop for char = (read-char stream nil nil)
until (member char '(nil #\Newline #\Space))
do (vector-push-extend char word))
(incf (gethash (copy-seq word) table 0)))
table))
(defun main (&optional (stream *standard-input*))
(let ((words (loop for v being the hash-values of (count-words stream)
using (hash-key k)
collect (list v k))))
(format t "~:{~&~D~T~A~}"
(sort words #'< :key #'first)))
0)
Comments
hallo, ich hab ne lösung mit clojure eingeschickt, leider ist die auch irgendwie nicht angekommen :(
Vielleicht landen alle Smug Lisp Weenies automatisch im Spamfilter. ;)
Submit a comment
Note: This website uses a JavaScript-based spam prevention system. Please enable JavaScript in your browser to post comments. Comment format is plain text. Use blank lines to separate paragraphs.