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]
`