Re: Sign Declaration
- To: mathgroup at smc.vnet.net
- Subject: [mg80105] Re: [mg80028] Sign Declaration
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sun, 12 Aug 2007 07:26:23 -0400 (EDT)
- References: <200708110602.CAA02393@smc.vnet.net>
On 11 Aug 2007, at 08:02, Mr Ajit Sen wrote:
> Dear MathGroup,
>
> Given the list A= {a,b,c,d,e,f,g,h}, I'd like to
> tell
> Mathematica (5.2) that a,b,...,e are +ve, and f,g,h are -ve.
>
> I'm using the following
>
> Table[Sign[A[[i]]]^=1,{i,5}];
>
> Table[Sign[A[[i]]]^=-1,{i,6,8}];
>
>
> My queries are :
>
> 1. Is it possible to combine the above into 1
> Table[]?
>
For example:
In[1]:= A = {a, b, c, d, e, f, g, h};
In[2]:= Do[Sign[A[[i]]] ^= Sign[5.5 - i], {i, 8}]
In[3]:= Sign /@ A
Out[3]= {1, 1, 1, 1, 1, -1, -1, -1}
(you can use Table instead of Do if you prefer it).
> 2. How do I achieve the same thing with the construct
>
> x/:Sign[x]=1
> in Table ?
Why do you keep insisting on using Table? Here is one way using
Function and Map:
A = {a, b, c, d, e};
Block[{x}, x /: Sign[x] = 1; Function[v, UpValues[v] = UpValues[x] /.
x -> v] /@ A;]
Sign /@ A
{1, 1, 1, 1, 1}
I think I would just use
>
> 3. Any more efficient ways of doing those sign
> declarations?
>
It depends on what sort of efficiency you are talking about. If you
want o be able to easily add positive and negative symbols I would
suggest a different approach. Use a heads, e.g. Pos and Neg to
distinguish positive and negative symbols and define:
Pos /: Sign[Pos[x_]] = 1;
Neg /: Sign[Neg[x_]] = -1;
Then
Sign /@ Join[Pos /@ {a, b, c, d, e}, Neg /@ {f, g, h}]
{1, 1, 1, 1, 1, -1, -1, -1}
and you can easily creat as many positive or negative symbols as you
like by simply mapping Pos or Neg on arbitrary lists.
Andrzej Kozlowski
- References:
- Sign Declaration
- From: Mr Ajit Sen <senra99@yahoo.co.uk>
- Sign Declaration