Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

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

Search the Archive

Re: syntax extension, precedence, Notation`

  • To: mathgroup at smc.vnet.net
  • Subject: [mg106577] Re: syntax extension, precedence, Notation`
  • From: magma <maderri2 at gmail.com>
  • Date: Sun, 17 Jan 2010 07:10:07 -0500 (EST)
  • References: <201001120949.EAA15726@smc.vnet.net> <hik8s7$6j4$1@smc.vnet.net>

On Jan 14, 11:46 am, Richard Fateman <fate... at cs.berkeley.edu> wrote:
> Jaebum Jung wrote:
> > You might want to try Notation package.
>
> > In[1]:= <<Notation`
> > In[2]:= BetterRules[x_->y_]:=x->y^2
> > In[3]:= Notation[x__/!  y_  \[DoubleLongLeftRightArrow]  
> > ReplaceAll[x__,BetterRules[y_]]]
> > In[4]:= (x+y)/!(x->3)
> > Out[4]= 9+y
>
> I tried Jaebum's suggestion , and while a useful hint, it doesn't work.
>
> 1. line 3 is not typed in but selected from a pop-up menu.
>
> 2. After doing that, the notation CAN be defined but...
>
> 3.  Jaebum's example requires all 4 extra parentheses as in In[4], which
> I explicitly did not want.  For people who know about parsing, "/!" has
> too high a binding power (precedence).
>
> 4. After further correspondence with Jaebum (thanks!), I found that
> Jaebum could not figure out how to alter the precedence of the new
> operator. It was clear to me that the Notations facility would
> be pretty useless if you could not set the precedence somehow, so
> I read some more.
>
> 5.  I DID figure out how to alter the precedence;  (I gather) it is
> based on the precedence of the character that begins the new
> operator.  Thus the default precedence of the new operator "/!" is
> like the operator "/".  We want the precedence to be more like "/.".
> Too bad.
>
> There may in fact be a way of altering precedence of an arbitrary new
> symbol, but I don't have a week to figure out the documentation and
> whether tags have something to do with it.
>
> Instead I picked another new operator, "=/." , since the precedence I
> want is lower precedence, more like = in Mathematica. (The table of
> operator precedence is in tutorial/OperatorInputForms)
>
> It works.
>
>     Here's what happens:
>
> start by providing input that looks like
>
> Notation[x__ =/. y__  <==> ReplaceAll[x__,BetterRules[y__]]]
>
> but can't really be fully typed in .. you have to select from a palette that
> pops up when you do  <<Notations`
>
> (In InputForm it looks like this ....)
>
> Notation`Private`myHold[
>   \(\*Notation`Private`makeHeldRowBoxOfBoxes[{x}, StandardForm, None] =
>      \(/.\*Notation`Private`makeHeldRowBoxOfBoxes[{y}, StandardForm,
>          None]\)\)
>   ]
>
> Anyway, one can, in this case, write
>
> a+s^2+1/s^2+z  =/. s^2->t
>   and get a+t+1/t+z
>
> compare to
>
> a+s^2+1/s^2+z  /. s^2->t
>   which produces a +1/s^2+t+z,
>
> (also compare to Jaebum's solution that requires
>
> (a+s^2+1/s^2+z)  /! (s^2->t)
>
> Other problems with Notations` :  so far as I can tell, typing in the
> alleged InputForm does not do the same work as selection from the
> palette. While notebooks may be nice, I like to have a simple text
> script that can be (for example) put in email. Also, it seems that
> Notation` must be explicitly loaded, but perhaps there's some trick to
> making this happen automatically.
>
> RJF
>
>
>
> > On 1/12/10 3:49 AM, Richard Fateman wrote:
> >> Is there a neat way to create a new symbol,
> >> say /!.    so that
>
> >> expression /. BetterRules[rules]
>
> >> could be written as
>
> >> expression /!. rules
>
> >> I do not find writing something like
>
> >>    (expression) ~BR~ (rules)
>
> >> to be quite adequate, especially with the extra parentheses.
> >> RJF

I agree with everything, except that the example you chose does not
really work as you say, for the simple reason that 1/s^2 has a
FullForm of Power[s,-2] so it is not picked up in the replacement.
One other thing I would like to point out:
the string =/. is displayed in red (syntax coloring) meaning that
Mathematica does not really like it (because it is a combination of
standard operators).
Perhaps one should use Symbolize first, in order to have Mathematica accept
the string as a single symbol.


  • Prev by Date: Re: Re: Simplify with NestedLessLess?
  • Next by Date: Re: Re: More /.{I->-1} craziness
  • Previous by thread: Re: syntax extension, precedence, Notation`
  • Next by thread: Re: syntax extension