Hi.

I've just started to learn some D, so maybe this question is extremely stupid, but please bear with me.

I have been trying to reverse a string, and through some googling found the std.algorithm.mutation.reverse method. But, when I try to use it I get some very verbose errors that just makes my eyes glaze over. What on earth do they mean? How do I reverse a string, really?

This is my code:
----------------------------
import std.stdio;
import std.algorithm;

void main() {
  auto test = "This is my text";
  string next_test = reverse(test);

  writeln(test);
  writeln(next_test);
}
----------------------------

This is my error:
----------------------------
[ante@tiny ~/src/D/tutorial]$ rdmd string4.d
/usr/home/ante/src/dmd2/freebsd/bin64/../../src/phobos/std/algorithm/mutation.d(2513):
 Error: template `std.algorithm.mutation.reverse` cannot deduce function from 
argument types `!()(immutable(ubyte)[])`, candidates are:
/usr/home/ante/src/dmd2/freebsd/bin64/../../src/phobos/std/algorithm/mutation.d(2485):        
`std.algorithm.mutation.reverse(Range)(Range r) if (isBidirectionalRange!Range && 
(hasSwappableElements!Range || hasAssignableElements!Range && hasLength!Range && 
isRandomAccessRange!Range || isNarrowString!Range && isAssignable!(ElementType!Range)))`
/usr/home/ante/src/dmd2/freebsd/bin64/../../src/phobos/std/algorithm/mutation.d(2521):
 Error: template `std.algorithm.mutation.reverse` cannot deduce function from 
argument types `!()(immutable(ubyte)[])`, candidates are:
/usr/home/ante/src/dmd2/freebsd/bin64/../../src/phobos/std/algorithm/mutation.d(2485):        
`std.algorithm.mutation.reverse(Range)(Range r) if (isBidirectionalRange!Range && 
(hasSwappableElements!Range || hasAssignableElements!Range && hasLength!Range && 
isRandomAccessRange!Range || isNarrowString!Range && isAssignable!(ElementType!Range)))`
string4.d(6): Error: template instance `std.algorithm.mutation.reverse!string` error instantiating Failed: ["/usr/home/ante/src/dmd2/freebsd/bin64/dmd", "-v", "-o-", "string4.d", "-I."]
------------------------------

Can some unpack that for me, please?

I might add that the most intuitive way to reverse a string, I think, would be to consider it a range and just do "newstring = oldstring[$ .. 0]" but that gives an error about being out of bounds, so I guess the compiler expect values to increase from left to right, and does not want to increment beyond $. Makes sense, but that syntax would be very neat.

Reply via email to