Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Single-step evaluation in Mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg81283] Re: [mg81235] Single-step evaluation in Mathematica
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Tue, 18 Sep 2007 00:45:35 -0400 (EDT)
  • References: <200709170732.DAA15466@smc.vnet.net>

On 17 Sep 2007, at 16:32, Szabolcs Horv=E1t 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
>


There is of course the built in function ValueQ which essentially 
does what you are askign for:

  abc := Print["side effect"]
ValueQ[abc]
True

abc =.
ValueQ[abc]
False

Of course the difference here is that the argument of VlaueQ is an 
expression and not the string that is the name of the expression. 
However, you can make it work with strings:

SetAttributes[f, HoldAll]
f[x_String] := ValueQ @@ ToExpression[x, InputForm, Hold]

Now:

abc := Print["side effect"]

f["abc"]
  True
abc =.
  f["abc"]
False

Andrzej Kozlowski





  • Prev by Date: Re: LegendreP error (bug?) in Mathematica
  • Next by Date: Re: Single-step evaluation in Mathematica
  • Previous by thread: Re: Single-step evaluation in Mathematica
  • Next by thread: Re: Single-step evaluation in Mathematica