Re: [Rd] string concatenation operator (revisited)
On Sat, 4 Dec 2021 21:26:05 -0500 Avi Gross via R-devel wrote: > In many languages, like PERL, this results in implicated conversion > to make "text1" the result. FWIW, Perl5 has a separate string concatenation operator (".") in order to avoid potential confusion with addition. So do Lua (".."), SQL ("||", only some of the dialects) and Raku ("~", former Perl6). Some of the potential concerns with string concatenation as an operator in R could be alleviated by introducing a separate operator, just like matrix multiplication ("%*%") is separate from elementwise multiplication ("*"), nowadays even in Python ("@" and "*", respectively). -- Best regards, Ivan __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] string concatenation operator (revisited)
Ivan Krylov wrote: > FWIW, Perl5 has a separate string concatenation operator (".") in order > to avoid potential confusion with addition. So do Lua (".."), SQL > ("||", only some of the dialects) and Raku ("~", former Perl6). Indeed, using the same operator '+' for addition and string concatenation is not a great idea in my opinion. Accidental character arguments to a '+' that meant to be a numerical addition would go undetected. Bug tracking would be harder in that case. R is already too permissive: it finds some interpretation of most probably buggy code, such as ifelse() on vectors of unequal length or '[' operator with only one argument to index a matrix. I would not want to add new permissive behaviors. A new operator, dedicated to string concatenation, such as %+% or %.%, would be better, in my opinion. -- Sincerely Andr� GILLIBERT [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] string concatenation operator (revisited)
On 05/12/2021 7:22 a.m., Ivan Krylov wrote: On Sat, 4 Dec 2021 21:26:05 -0500 Avi Gross via R-devel wrote: In many languages, like PERL, this results in implicated conversion to make "text1" the result. FWIW, Perl5 has a separate string concatenation operator (".") in order to avoid potential confusion with addition. So do Lua (".."), SQL ("||", only some of the dialects) and Raku ("~", former Perl6). Some of the potential concerns with string concatenation as an operator in R could be alleviated by introducing a separate operator, just like matrix multiplication ("%*%") is separate from elementwise multiplication ("*"), nowadays even in Python ("@" and "*", respectively). People seem to handle the automatic conversion of comparison operators. Occasionally someone is surprised that 123 < "5" is TRUE, but mostly people muddle along. One possible issue is that for some things (e.g. S3 Arith group generic), "+" is grouped with the other arithmetic operators, "-", "*", "^", "%%", "%/%", "/". I don't think it would make sense for any of them to work on strings. But there are exceptions listed for number of arguments among the Math group, so an exception in the Arith group wouldn't be the end of the world. Duncan Murdoch __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] string concatenation operator (revisited)
> The TL;DR version is base R support for a `+.character` method. This > would essentially provide a shortcut to `paste0`... In pqR (see pqR-project.org), I have implemented ! and !! as binary string concatenation operators, equivalent to paste0 and paste, respectively. For instance, > "hello" ! "world" [1] "helloworld" > "hello" !! "world" [1] "hello world" > "hello" !! 1:4 [1] "hello 1" "hello 2" "hello 3" "hello 4" This seems preferable to overloading the + operator, which would lead to people reading code wondering whether a+b is doing an addition or a string concatenation. There are very few circumstances in which one would want to write code where a+b might be either of these. So it's better to make clear what is going on by having a different operator for string concatenation. Plus ! and !! semm natural for representing paste0 and paste, whereas using ++ for paste (with + for paste0) would look rather strange. Radford Neal __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel