digitalmars.D - map on fixed-size arrays
- Eduardo Cavazos (19/19) Aug 21 2010 Hello,
- bearophile (5/6) Aug 21 2010 See bug 4114
- Dmitry Olshansky (14/33) Aug 21 2010 You always can workaround this by taking full slice:
- Pelle (2/21) Aug 21 2010 IIRC, it's intended. Use a[] to get a dynamic array from a.
- Andrei Alexandrescu (8/27) Aug 21 2010 To some extent, yes; fixed-size arrays are passed by value and most of
Hello,
The 'map' from std.algorithm doesn't seem to work with fixed-size arrays:
----------------------------------------------------------------------
import std.stdio ;
import std.math ;
import std.algorithm ;
T sq ( T ) ( T x ) { return x*x ; }
void main ()
{
double [2] a = [ 1.0 , 2.0 ] ;
writeln ( map ! ( sq ) ( a ) ) ;
}
----------------------------------------------------------------------
$ rdmd test_map_sq_fixed_size_b.d
/usr/include/d/dmd/phobos/std/algorithm.d(108): Error: template instance
Map!(sq,double[2u]) does not match template declaration Map(alias
fun,Range) if (isInputRange!(Range))
Is this an intended limitation?
Ed
Aug 21 2010
Eduardo Cavazos:The 'map' from std.algorithm doesn't seem to work with fixed-size arrays:See bug 4114 In my opinion map, sort, etc have to work with fixed-sized arrays too (otherwise I'll have to write more wrappers). Bye, bearophile
Aug 21 2010
On 21.08.2010 14:37, Eduardo Cavazos wrote:
Hello,
The 'map' from std.algorithm doesn't seem to work with fixed-size arrays:
----------------------------------------------------------------------
import std.stdio ;
import std.math ;
import std.algorithm ;
T sq ( T ) ( T x ) { return x*x ; }
void main ()
{
double [2] a = [ 1.0 , 2.0 ] ;
writeln ( map ! ( sq ) ( a ) ) ;
}
----------------------------------------------------------------------
$ rdmd test_map_sq_fixed_size_b.d
/usr/include/d/dmd/phobos/std/algorithm.d(108): Error: template
instance Map!(sq,double[2u]) does not match template declaration
Map(alias fun,Range) if (isInputRange!(Range))
Is this an intended limitation?
Ed
You always can workaround this by taking full slice:
import std.stdio ;
import std.math ;
import std.algorithm ;
T sq ( T ) ( T x ) { return x*x ; }
void main ()
{
double [2] a = [ 1.0 , 2.0 ] ;
writeln ( map ! ( sq ) ( a[] ) ) ;
}
I'm not sure if it's by design.
--
Dmitry Olshansky
Aug 21 2010
On 08/21/2010 12:37 PM, Eduardo Cavazos wrote:
Hello,
The 'map' from std.algorithm doesn't seem to work with fixed-size arrays:
----------------------------------------------------------------------
import std.stdio ;
import std.math ;
import std.algorithm ;
T sq ( T ) ( T x ) { return x*x ; }
void main ()
{
double [2] a = [ 1.0 , 2.0 ] ;
writeln ( map ! ( sq ) ( a ) ) ;
}
----------------------------------------------------------------------
$ rdmd test_map_sq_fixed_size_b.d
/usr/include/d/dmd/phobos/std/algorithm.d(108): Error: template instance
Map!(sq,double[2u]) does not match template declaration Map(alias
fun,Range) if (isInputRange!(Range))
Is this an intended limitation?
Ed
IIRC, it's intended. Use a[] to get a dynamic array from a.
Aug 21 2010
On 8/21/10 5:37 CDT, Eduardo Cavazos wrote:
Hello,
The 'map' from std.algorithm doesn't seem to work with fixed-size arrays:
----------------------------------------------------------------------
import std.stdio ;
import std.math ;
import std.algorithm ;
T sq ( T ) ( T x ) { return x*x ; }
void main ()
{
double [2] a = [ 1.0 , 2.0 ] ;
writeln ( map ! ( sq ) ( a ) ) ;
}
----------------------------------------------------------------------
$ rdmd test_map_sq_fixed_size_b.d
/usr/include/d/dmd/phobos/std/algorithm.d(108): Error: template instance
Map!(sq,double[2u]) does not match template declaration Map(alias
fun,Range) if (isInputRange!(Range))
Is this an intended limitation?
Ed
To some extent, yes; fixed-size arrays are passed by value and most of
the time you don't want that with an algorithm. You have the burden to
append "[]" to fixed-size arrays so they are passed inside the
algorithms as dynamic-length slices.
std.algorithm could detect that and take care of that detail for you, at
the cost of duplicating most function signatures.
Andrei
Aug 21 2010









bearophile <bearophileHUGS lycos.com> 