And this could open the door to "organic code" : dynamically discovering the source code of functions, and - why not- correcting / adjusting the code by re-def ining the function by manipulating its original source code.
Some sort of macro, at runtime :-) On Nov 3, 3:57 pm, Paul Barry <[EMAIL PROTECTED]> wrote: > I agree that this would be helpful. > > On Nov 2, 6:34 pm, Mark McGranaghan <[EMAIL PROTECTED]> wrote: > > > I really like being able to find and check documentation in the REPL > > with find-doc and doc, but I often would like to see the source code > > of a function or macro to be able to understand it better or learn > > from the implementation. To do this I switch into an editor with > > boot.clj, find and read the source, then switch back into the REPL. > > Doing this a lot got me thinking, what if we could just do e.g. > > > user=> (source filter) > > (defn filter > > "Returns a lazy seq of the items in coll for which > > (pred item) returns true. pred must be free of side-effects." > > [pred coll] > > (when (seq coll) > > (if (pred (first coll)) > > (lazy-cons (first coll) (filter pred (rest coll))) > > (recur pred (rest coll))))) > > nil > > user=> > > > This might also be also be useful for programatically generating > > documentation with handy "view source" links. > > > I was think for the source macro something like: > > (defmacro source > > "Prints the source text of the top-level form in which var was > > created." > > [name] > > `(if-let src-txt# (:source (meta (var ~name))) > > (println src-txt#) > > (println "no source found")))) > > > For that to work we would need a :source meta value like we currently > > have for :line and :file. > > > My questions then are: > > - Does the general idea of a source macro or something similar sound > > useful? Am I missing something that renders such a feature > > unnecessary? > > - How might one implement the source macro and the associated support > > in the reader/compiler? > > > Thanks for your thoughts, > > - Mark --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---