| Ilya Zakharevich on Tue, 20 Dec 2011 03:00:41 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Online brainstorming session for GP language feature. |
On Tue, Dec 20, 2011 at 12:05:55AM +0100, Bill Allombert wrote:
> 3) Precision:
>
> 3.1) myprec(x): set the precision to precision(x) in the current block
> 3.2) Pi(34): return Pi with 34 digits of precision
> 3.3) Allow to handle precision in bits instead of digits.
I do not think Pi(34) is an improvement. To explain why, I need to
introduce another "requirement". And Pi(34) would contradict this
requirement. [Why not have PI(34) instead?]
What is IMO very important is to have a frontend which (in its most
flexible settings) accepts inputs like
2Pi(x+y)(x+1)
2Pi(x+y)<super 3>(x+1)
3 v<subscript 4><super 5>
Such front end would require two new operators in PARI (denoted below
by multiletter codes (*) [*] - but one may choose arbitrary silly
characters since they will not be produced other ways than by the
frontend). E.g., the inputs above would be translated to
2 * Pi (*) (x+y)**3 * (x+1)
2 * v [*] 3 ** 5
Here [*] is the most tightly bound "macro" [*] which produces v3 if this
name is known, otherwise v[3]. (*) produces Pi(x+y) if Pi is a
function taking an argument (in this case its binding is the most
tight), otherwise it produces * (with natural priority).
[*] "macro" is something which operates on unexpanded v, not on
the value of v.
Note: the priority of (*) is not known during the "skipping" part
of the PARI parsing. But I suspect this will never affect
the result of skipping.
Anyway, if Pi takes 0 arguments (as today), then
2Pi(x+y)(x+1) = 2*Pi*(x+y)*(x+1)
(as expected). However, if Pi takes one argument, this would become
2Pi(x+y)(x+1) = 2*Pi(x+y)*(x+1)
which is not what one expects from experience with math formulae.
Having Pi 0-argument, and PI 1-argument would solve this.
Yours,
Ilya
P.S. BTW: having another operator (!*) would be handy too (but it may
need more syntaxic conflict analysis than (*)). Its semantic is
the same as for (*), but its binding in the "apply" form is
between multiplication and power; it is right associative.
The frontend would produce it instead of (*) for input like
WORD NONPARENTHESIS
So
sin sin x^3 y
will be translated by the frontend to
sin (!*) sin (!*) x^3 * y
which would be equivalent to
sin( sin (x^3) ) * y