yep, you do have a point
the thing is, that at runtime it's nolonger known that symbol y points to
symbol x, it's only known that y is a function (just like x is, but without
the connection between them), so I really don't see how to actually get the
var of the function that some y points-to eventually

anyway I'm just going to stop here, but this is as far as i got:
=> (defmacro get-lexical-asvar [q]
     (let [
           oem (zipmap (keys &env) (vals &env))
           ]
       (loop [
              yy (second (find oem q))
              expr (.init yy)
              ]
         (cond (instance? clojure.lang.Compiler$VarExpr expr)
           `~(.var expr)
           :else
           (do
             (assert (instance? clojure.lang.Compiler$LocalBindingExpr
expr))
             `~(.var (.init (.b expr)))
             ;        (recur (.init (second (find oem yy))))
             )
           )
         )

       )
     )
#'runtime.q/get-lexical-asvar
=> (let [notworking (#(do assoc))
         x assoc
         y x
         z y]
     (str (get-lexical-asvar y))
     )
"#'clojure.core/assoc"

but since x will have to eval at runtime, and at runtime y and z will have
the same value as x... without the visible connections between them (I
think, unless a macro is keeping them somehow, maybe add metadata?) then I
don't see how I could pass z and get the var of assoc ... but for me this
seems to be quite a necessary concept, but since I don't know clojure much
at all, perhaps there is an idiomatic way already? anyone?


On Sun, Mar 3, 2013 at 1:47 PM, Dave Sann <daves...@gmail.com> wrote:

> because it is a macro, I am not sure it can work for y. (my macro skills
> are limited)
>
> but in the general case where the data is not available at compile time. I
> am not sure macros will help.
>
>
> On Sunday, 3 March 2013 23:44:56 UTC+11, AtKaaZ wrote:
>
>> oo, what do we have here?
>> => (defmacro get-lexical-asvar [q]
>>      (let [
>>            oem (zipmap (keys &env) (vals &env))
>>            zz (.var (.init (second (find oem q))))
>>            ]
>>        `~zz
>>        )
>>      )
>> #'runtime.q/get-lexical-asvar
>> => (let [x assoc
>>          y x]
>>      (str (get-lexical-asvar x))
>>      )
>> "#'clojure.core/assoc"
>>
>> but it doesn't (yeT) work for y
>>
>>
>> On Sun, Mar 3, 2013 at 1:27 PM, AtKaaZ <atk...@gmail.com> wrote:
>>
>>> ok you're right, it's impossible to get the var since those x and y are
>>> already resolved to the function, and multiple vars could point to the same
>>> function anyway.
>>>
>>> => (let [x assoc
>>>          y x]
>>>      (get-lexical-env)
>>>      )
>>> {x #<core$assoc clojure.core$assoc@35fcd90c>, y #<core$assoc
>>> clojure.core$assoc@35fcd90c>}
>>>
>>> for consistency, ignore the following:
>>> ;the following is inspired from http://blog.jayfields.com/**
>>> 2011/02/clojure-and.html<http://blog.jayfields.com/2011/02/clojure-and.html>
>>> (defmacro get-lexical-env []
>>> "
>>> => (let [a 1 b (+ 1 2)]
>>>      (let [c (do \"a\" \"b\")]
>>>        (q/get-lexical-env)
>>>        )
>>>      )
>>> {a 1, b 3, c \"b\"}
>>> "
>>>   (let [envkeys (keys &env)]
>>>     `(zipmap (quote ~envkeys) (list ~@envkeys))
>>>     )
>>>   )
>>>
>>> (defmacro show-lexical-env []
>>>   `(clojure.pprint/pprint (get-lexical-env))
>>>   )
>>>
>>>
>>> On Sun, Mar 3, 2013 at 1:05 PM, AtKaaZ <atk...@gmail.com> wrote:
>>>
>>>> that's true but I thought you meant in general
>>>> basically, I'm looking for a way to get the var... ie.
>>>> => (let [x assoc
>>>>          y x]
>>>>      *(var y)*
>>>>      )
>>>> CompilerException java.lang.RuntimeException: Unable to resolve var: y
>>>> in this context, compiling:(NO_SOURCE_PATH:3:3)
>>>>
>>>> => (let [x assoc
>>>>          y x]
>>>>      y
>>>>      )
>>>> #<core$assoc clojure.core$assoc@35fcd90c>
>>>> => (var assoc)
>>>> #'clojure.core/assoc
>>>>
>>>>
>>>> something that can replace that (var y) with something that actually
>>>> gets the var that y resolves to.
>>>>
>>>>
>>>>
>>>> On Sun, Mar 3, 2013 at 12:58 PM, Dave Sann <dave...@gmail.com> wrote:
>>>>
>>>>> I think, that will only work if you do it directly.
>>>>>
>>>>> It will not work in the example I gave.
>>>>>
>>>>> Dave
>>>>>
>>>>>
>>>>> On Sunday, 3 March 2013 22:43:14 UTC+11, AtKaaZ wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sun, Mar 3, 2013 at 12:21 PM, Dave Sann <dave...@gmail.com> wrote:
>>>>>>
>>>>>>> This may be a question for clojure dev
>>>>>>>
>>>>>>> I find myself wanting to be able to print data-structures containing
>>>>>>> resolvable functions
>>>>>>>
>>>>>>> e.g.
>>>>>>>
>>>>>>> (let [x assoc] (str [x :a :b]))
>>>>>>>
>>>>>>> would be:
>>>>>>>
>>>>>>>   "[#fn clojure.core/assoc :a :b]"
>>>>>>>
>>>>>>> or similar, rather than the current:
>>>>>>>
>>>>>>>   "[#<core$assoc clojure.core$assoc@6d289e48> :a :b]"
>>>>>>>
>>>>>>> which is unreadable.
>>>>>>>
>>>>>>> I can read this tag very easily, using the data-reader
>>>>>>>
>>>>>>>   {fn resolve} or,
>>>>>>>
>>>>>>>   (set! *data-readers* {'fn resolve})
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> But I don't know of any way to get the name and namespace of a
>>>>>>> function to write it out.
>>>>>>>
>>>>>> Did you mean this?
>>>>>> => (meta #'assoc)
>>>>>> {:ns #<Namespace clojure.core>, :name assoc, :arglists ([map key val]
>>>>>> [map key val & kvs]), :column 1, :added "1.0", :static true, :doc
>>>>>> "assoc[iate]. When applied to a map, returns a new map of the\n    same
>>>>>> (hashed/sorted) type, that contains the mapping of key(s) to\n    val(s).
>>>>>> When applied to a vector, returns a new vector that\n    contains val at
>>>>>> index. Note - index must be <= (count vector).", :line 177, :file
>>>>>> "clojure/core.clj"}
>>>>>>
>>>>>>
>>>>>>> I think this is not possible at the moment.
>>>>>>>
>>>>>>>
>>>>>>> Anyone?
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> Dave
>>>>>>>
>>>>>>> --
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Clojure" group.
>>>>>>> To post to this group, send email to clo...@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+u...@**googlegroups.com
>>>>>>>
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/**group**/clojure?hl=en<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+u...@**googlegroups.com.
>>>>>>>
>>>>>>> For more options, visit 
>>>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out>
>>>>>>> .
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Please correct me if I'm wrong or incomplete,
>>>>>> even if you think I'll subconsciously hate it.
>>>>>>
>>>>>>   --
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clo...@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+u...@**googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/**group/clojure?hl=en<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+u...@**googlegroups.com.
>>>>> For more options, visit 
>>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>>> .
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Please correct me if I'm wrong or incomplete,
>>>> even if you think I'll subconsciously hate it.
>>>>
>>>>
>>>
>>>
>>> --
>>> Please correct me if I'm wrong or incomplete,
>>> even if you think I'll subconsciously hate it.
>>>
>>>
>>
>>
>> --
>> Please correct me if I'm wrong or incomplete,
>> even if you think I'll subconsciously hate it.
>>
>>   --
> --
> 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.
>
>
>



-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

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