| Karim Belabas on Mon, 06 Aug 2012 12:20:06 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Patch: default(sopath), default(outputsp[aces]) |
* Bill Allombert [2012-08-05 18:32]:
>>> 1) have two functions printsep() [ with \n ] and printsep1() [ without ],
>>>
>>> 3) allow user functions with a variable number of arguments and let the user
>>> define his own variant.
>>>
>>> Allowing "varargs" user functions is obviously very desirable independently of
>>> the printsep() feature, but it's currently not available, so not an immediate
>>> option.
>
> Only options 1 and 3 are consistent with the rest of the interface.
I'm not so sure: the interface is already inconsistant
- print() / write() have a print1() / write1() variant, but printtex() /
writetex() do not [ one must use print1(Strtex(...)) ]
- printf() doesn't have the trailing \n, like its C counterpart.
And nobody complained so far.
- since I'm so used to printf, I find myself often mistakenly including
a "\n" at the end of character strings output by print() ... [ ugly
double carriage return ]
I don't see why having a printsep() behave like printf() would be
inconsistent, it's a kind of "formatted printing" after all.
If we agree that 0) is not inconsistent, then 2) makes sense because
it's annoying to be unable to print a \n without an extra separator
showing up. In fact, one could also propose never to print a separator
before a "\n" element, wherever it might appear in the argument list.
> Now, if we allow user functions with a variable number of arguments, what would be the
> syntax ? Maybe
>
> f(a,b,c,v[])=
> {
> print(a);
> for(i=1,#v,print(v[i]))
>
> }
Looks good:
Printsep(join, v[]) =
{
for (i=1,#v,
print1(v[i]);
if (i < #v, print1(join)));
}
Would one be able to pass it like va_lists, as in
Printsepln(join, v[]) = Printsep(join, v[]); print();
? (Not a major feature, though.)
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]
`