|
[Date Index]
[Thread Index]
[Author Index]
Re: Retrieving pasteable function definition without contexts preprended
- To: mathgroup at smc.vnet.net
- Subject: [mg123945] Re: Retrieving pasteable function definition without contexts preprended
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Sun, 1 Jan 2012 02:28:45 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jd4fdh$da8$1@smc.vnet.net> <jdh6j4$kmd$1@smc.vnet.net>
On 2011.12.29. 8:58, A Retey wrote:
> Hi,
>
>> I'm essentially asking the same question that E. Martin-Serrano has
>> asked this February (message quoted at the end):
>>
>> http://forums.wolfram.com/mathgroup/archive/2011/Feb/msg00515.html
>>
>> What is the best way to print the definition of a package symbols
>> without contexts, so it's more readable?
>>
>> To his question (what is a substitute to Developer`ContextFreeForm), we
>> can use Block[{$ContextPath = Append[$ContextPath =
>> "contextIdontWantPrinted`", FullDefinition[symbol]]
>>
>> This method still has a problem though. The definition that's printed
>> cannot be copied directly because quotation marks are missing. I would
>> like to copy it to Workbench for formatting.
>>
>> Take for example the definition of RunThrough which contains
>> WriteString[tmpfile, "\n"]. The "\n" part won't show at all.
>>
>> Are there any other solutions? Do you have any other suggestion about
>> making it easy to read the code of already defined function (when we
>> don't have access to the source file)?
>>
>> Note: I also asked about this here
>> <http://stackoverflow.com/questions/8607813> and got an alternative
>> answer to pasting to Workbench for formatting.
>
> I'm not sure whether this is really what you need, but from your
> description you are only missing an InputForm in the
> stackoverlfow-suggestion. The following gives code that can be copied
> and pasted to workbench:
>
> Unprotect[RunThrough];
>
> ClearAttributes[RunThrough, ReadProtected]
>
> Block[{$ContextPath = Append[$ContextPath, "System`Dump`"]},
> Print[InputForm[FullDefinition[RunThrough]]]]
>
Thank you, this indeed solves the problem! I am not sure why I thought
that InputForm doesn't affect FullDefinition ...
It's also important to note that Print[] is essential here. Without it
the context names are not removed.
Based on this, here's a function to print definitions with the commonest
context removed:
commonestContext[sym_Symbol] :=
Commonest[
Cases[
Level[DownValues[sym], {-1}, HoldComplete],
s_Symbol /; FreeQ[$ContextPath, Context[s]] :> Context[s]
], 1]
contextFreeDefinition[sym_Symbol] :=
Internal`InheritedBlock[{sym},
ClearAttributes[sym, ReadProtected];
Block[ {$ContextPath =
Join[$ContextPath, commonestContext[sym]]},
Print@InputForm[FullDefinition[sym]]
]
]
Example use:
contextFreeDefinition[RunThrough]
--
Szabolcs Horvát
Mma QA site proposal: http://area51.stackexchange.com/proposals/37304
Prev by Date:
Re: beginner question regarding units in equations
Next by Date:
Re: PairedBarChart "Education and Training pay..."
Previous by thread:
Re: beginner question regarding units in equations
Next by thread:
Re: PairedBarChart "Education and Training pay..."
|