Hi,

Am 22.12.12 00:37, schrieb Lee Spector:

> ;; this is defined elsewhere, and I want push-states to have fields for each 
> push-type that's defined here
> (def push-types '(:exec :integer :float :code :boolean :string :zip
>                         :tag :auxiliary :return :environment)
> 
> (defn keyword->symbol [kwd]
>   "Returns the symbol obtained by removing the : from a keyword."
>   (read-string (name kwd)))

I'm afraid this one is still necessary, but I would use symbol instead
of read-string.

> (defmacro define-push-state-record-type []
>   "Defines the pushstate record type. The odd trick with read-string was a 
> hack to 
> avoid namespace qualification on the pushstate symbol."
>   `(defrecord ~(read-string "pushstate") [~@(map keyword->symbol 
> push-types)]))

Use ~'pushstate instead of read-string.

> (define-push-state-record-type)
> 
> (defmacro make-push-state
>   "Returns an empty push state."
>   []
>   `(pushstate. ~@(map (fn [_] nil) push-types)))

Use this:

(defn make-push-state
  []
  (map->pushstate {}))

> Is there a much simpler way that I overlooked?

I'm not sure it's simpler, but it's more straight-forward, I'd say.

Kind regards
Meikel


-- 
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