Karim Belabas on Tue, 08 Jul 2014 08:50:31 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: concat([])


* Jack Brennen [2014-07-08 01:23]:
> Note that concat() has some serious weirdnesses
> when you mix strings with other types...
> This is version 2.5.5 behavior:
> 
> ? concat(["",1,x,y])
> %1 = "1xy"
> ? concat([1,x,y,""])
> %2 = "[1, x, y]"
> ? concat([[],x,y,""])
> %3 = "[x, y]"
> ? concat([[],x,y,[]])
> %4 = [x, y]
> ? concat(["",x,y,[]])
> %5 = "xy[]"

This is consistent with the documentation: concatenation from left to right.

> It seems as if it progresses using non-string-based concatenation
> until it finds a string, at which point it converts the result
> so far to a string and then continues?

Exactly, this follows from the rule above. This is not stated in the
docs (I'll add it) but the basic 2-argument form concat(x, y) returns a
t_STR if either x or y is a t_STR. In fact, the string obtained from
concatenating the printed representations of x and y (without the
enclosing quotes, for the one which is a t_STR)

Note that using this behavious is somewhat deprecated now that Str accepts an
arbitrary number of arguments:

  Str(x,y,[])

is more natural (and less surprising) than

  concat(["",x,y,[]])

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/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`