| Karim Belabas on Fri, 22 Jun 2012 17:13:12 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Assigning closure names |
* Dirk Laurie [2012-06-22 16:54]:
> Consider the following GP session.
>
> ? type(Ser)
> %1 = "t_CLOSURE"
> ? type(Vec)
> %2 = "t_VEC"
>
> Deduction: when a built-in function may be called
> with an empty parameter list, the bare name is
> interpreted as a function call, not as a reference
> to the closure.
Originally an old misguided design decision of mine: I had decided to
allow 'f' as a shortcut for 'f()'. In the old interpretor -- before
Bill's rewrite --, this had the small advantage of allowing 'Pi' as a
shortcut for 'Pi()'.
Note that your specific example only works in pari-stable. In
pari-2.6.*, Vec() has a mandatory argument.
> Is there a way to access the closure "Vec" as a Pari object?
I do not see any simple way, maybe Bill will have a clever idea.
Here's a close variant
(17:06) gp > f = x->Vec(x);
(17:06) gp > type(f)
%2 = "t_CLOSURE"
(17:06) gp > f(x + 2)
%3 = [1, 2]
There's a minor difference, though: f has a mandatory argument, contrary
to (pari-stable-)Vec.
This also works without arguments:
(17:09) gp > f = ()->Pi
%4 = ()->Pi
(17:11) gp > f()
%5 = 3.1415926535897932384626433832795028842
Cheers,
K.B.
--
Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation http://www.math.u-bordeaux1.fr/~belabas/
F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP]
`