Re: Single-step evaluation in Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg81289] Re: Single-step evaluation in Mathematica
- From: Chris Chiasson <chris.chiasson at gmail.com>
- Date: Tue, 18 Sep 2007 05:53:19 -0400 (EDT)
- References: <fclape$f7b$1@smc.vnet.net>
On Sep 17, 2:36 am, Szabolcs Horv=E1t <szhor... at gmail.com> wrote: > I would like to have a function, hasOwnValue, that takes the name of a > symbol as a string, and tells whether the symbol has an own-value. It > should do this without evaluating the value of the symbol. > > Examples: > > abc := Print["side effect"] > xyz =. > > In := hasOwnValue["abc"] (* "side effect" must not be printed *) > Out = True > > In := hasOwnValue["xyz"] > Out = False > > How can I achieve this? > > This is a practical problem that I ran into, but the general question > is: What do you do when you feel the need for *single-step evaluation* > in Mathematica? E.g. how can I manipulate/transform held expressions > made up of symbols that have values? An artificial example: > > a = 1 > Hold[{a,b,c}] > > How do I reverse the list inside Hold? I could map Hold to each > element, reverse the list, hold the list again, and remove Hold from > individual elements to get Hold[{c,b,a}], but this is very inconvenient. > > Szabolcs It would be quite trivial to achieve single step evaluation if the *Values of all the system variables were readable. However, they are not. I recommend reading: http://library.wolfram.com/conferences/devconf99/villegas/UnevaluatedExpres= sions.nb (or, in HTML) http://library.wolfram.com/conferences/devconf99/villegas/UnevaluatedExpres= sions/ Also, I would recommend these two posts for the held evaluation properties of Block, With, Module, RuleCondition, $ConditionHold, and the multi argument Function: http://forums.wolfram.com/mathgroup/archive/2007/Aug/msg00958.html http://forums.wolfram.com/mathgroup/archive/2007/Sep/msg00327.html -- http://chris.chiasson.name/