On Sep 30, 2010, at 10:37 PM, HiHeelHottie wrote:

> (ns test-test.parse
>  (:use [clojure.contrib.string :only (split)]))
> 
> (defn parse-char [m c]
>  (condp = (:state m)
>      :degree (cond
>               (Character/isDigit c) (assoc m :degree (+ (* (:degree
> m) 10) (Character/digit c 10)))
>               (Character/isWhitespace c) (assoc
> m :state :whitespace :buf (conj (:buf m) (:degree m) " ") :degree 0))
>      :whitespace (cond
>                   (Character/isDigit c) (assoc
> m :state :degree :degree (+ (* (:degree m) 10) (Character/digit c
> 10)))
>                   (Character/isWhitespace c) m)))
> 
> (defn parse [s]
>  (let [m (reduce parse-char {:state :degree :degree 0 :buf []} (str s
> " "))]
>    (apply str (:buf m))))
> 
> (println (parse "1 2   33"))

One minor improvement would be to use clojure.string/join instead of str. That 
way you won't have to manually append a space after each number in :buf (nor 
use apply).

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to