| Bill Allombert on Tue, 22 Nov 2005 11:22:01 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: print1() behaviour changed |
On Tue, Nov 22, 2005 at 09:44:00AM +0100, Jeroen Demeyer wrote:
> Hello list,
>
> I noticed that the print1() function has changed.
>
> The following shell command:
> echo -e "print1(0);\nprint1(1);" |gp -f -q
>
> Prints "01" (no newline) in CHANGES-1.1295
> Prints "0\n1" (with newline) in CHANGES-1.1384
Hello Jeroen,
The behaviour in CHANGES-1.1295 was actually temporary and was not part
of any releases.
> (I didn't check in which version exactly this changed)
>
>
> But if there is no newline in the input:
> echo -e "print1(0);print1(1);" |gp -f -q
>
> Then I get "01" in both versions.
Not really! You get "01\n" with CHANGES-1.1384 and "01" with
CHANGES-1.1295!
> So it seems that whenever there is a newline in the input, a newline is
> printed, even with print1(). I hope it's clear what I mean...
In fact, the reason is very different:
PARI/GP has the notion of 'input line': it reads a full input line
and evaluate it. If the output does not end by a \n, it adds it,
so the next output will be properly aligned.
print1(0);print1(1); is a single input line but print1(0);\nprint1(1);
is two input lines. The solution is to use braces around your
script to make it look like a single input line:
{print1(0);\nprint1(1);}
> Has this been changed on purpose? I prefer the old way (no newline),
> because it's very useful in scripts. Otherwise I don't get the point of
> the print1() function.
It does not normally affect scripts. It only affects running scripts as
gp -q < script
In that case you can do
gp -q script </dev/null
instead, or use braces.
The difference is similar than between read() and \r:
? read(script)
? \rscript
Cheers,
Bill.