Hi,

Am Montag, 23. September 2013 11:37:10 UTC+2 schrieb Phillip Lord:
>
> So, now I can refer to an OWL file in 
> exactly the same way as if it were written in Clojure.
>

Ok. So, it is correct to think of this as a fancy require-owl, isn't it? 
Then this means you read the OWL files at compilation time of your code. 
But that means, that a macro expanding to a series of def will do the job. 
There is no need for a require. I could imagine something like this (a lot 
of pseudo-code there):

(defmacro defowl
  [sym init]
  `(do
     (def ~(with-meta sym {:owl true}) ~init)
     (tawny.owl/run-intern-hook (var ~sym))
     (var ~sym)))

(defn owl-entry-definition
  [{:keys [sym init]}]
  `(defowl ~(further-process sym) ~init))

(defmacro require-owl
  [file]
  (let [owl-entries (owl-seq (io/reader file))]
    `(do ~@(map owl-entry-definition owl-entries))))

; Usage
(require-owl "containing-A-and-B.owl")

(defn use-classes
  []
  (do-something-owly A B))

This could be further cleaned up, but I think you get the idea. (One could 
add for example namespace handling for owl files or provide it as an option 
to require-owl, use with-open &c. &c.)

For testing, resolve and ns-resolve are your friend:

(deftest loading-owls
  (require-owl "some-dummy-A.owl")
  (let [dummy-A (resolve 'A)]
    (is (not (nil? dummy-A)))
    (is (= @dummy-A some-reference-A))))


Hope that helps.

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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to