Hello,
I want to generate non-Clojure s-expressions in Clojure code, with a nice
templating format (like syntax-quote provides), BUT with the option of
providing my own methods/functions for
resolving/processing symbols, and the ability to provide my own
methods/functions for evaluating syntax-quote "escapes", e.g. ~, @.
Is there anything out there I can use?
Here is some background:
I have been playing around with generating SUO-KIF from Clojure code.
ontolog.cim3.net/file/resource/reference/SIGMA-kee/suo-kif.pdf
Here is an example SUO-KIF form:
(=>
(instance ?COMPANY Coffeeshop)
(exists (?SERVICE ?BEVERAGE)
(and
(instance ?SERVICE CommercialService)
(agent ?SERVICE ?COMPANY)
(instance ?SERVICE Selling)
(patient ?SERVICE ?BEVERAGE)
(instance ?BEVERAGE Coffee))))
I'd like to generate the above via a Clojure macro/function that would be
called like this:
(sells Coffeeshop Coffee)
By defining sells something like this:
(defmacro-like-thing sells [kind-of-store product]
`(=>
(instance ?COMPANY ~kind-of-store)
(exists (?SERVICE ?PRODUCT))
…
))
My initial thought was this was going to be completely trivial, and I'd be done
in 30 minutes maximum
and it is easy to generate something right away, but I am not at all happy
with the result, especially what the Clojure code "templates" look like.
It would be really nice if the resulting template would look very close to the
resulting output, so that users of this tool (Ontologists, not programmers)
could easily see/specify the templates.
My first thought was that I would use Clojure macros and syntax-quote to
generate the SUO-KIF s-expressions.
To my way of thinking, syntax-quote is a very nice s-exp templating tool, what
could be easier?
I quickly re-learned that macros are a really about generating Clojure, at read
time, that is then eval'ed.
Two issues with that:
1) symbols in my template specification are
resolved/namespace-qualified by syntax-quote, which is not what I want at all.
2) I don't want the resulting s-expression to be eval'ed by Clojure. I
can work around that by having the the macro return (quote s-exp), I guess.
I then tried using syntax-quote within a Clojure function, but again,
syntax-quote is resolving/namespace-qualifying the symbols,
and of course, a function's arguments are always evaluated on the way in, which
leads to tedious and unpleasant quoting of SUO-KIF symbols.
I'd welcome any thoughts/pointers about how best to approach this.
Don
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en