[Date Index]
[Thread Index]
[Author Index]
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**
| |