newbie question: Can D do this?
Ali Çehreli
acehreli at yahoo.com
Mon Dec 19 10:41:29 PST 2011
On 12/19/2011 08:17 AM, clk wrote:
> I'm a little bit intimidated by the fact that the topics in the d-learn
> list look rather advanced to a newbie like me.
We need more newbie topics here! :)
> 1) Does D support something like the javascript 1.8 destructuring
> assigment (multiple assigment in python):
>
> [a, b] = [b, a];
No multiple assignment like that. But useful approarches exist for most
needs, like the swap that simendsjo has shown.
> 2) D doesn't seem to support the list comprehension syntax available in
> python and javascript. Is this correct?
>
> [f(x) for x in list if condition]
List comprehension is not part of the language.
import std.algorithm;
void f(int x)
{}
bool condition(int x)
{
return true;
}
void main()
{
auto list = [ 0, 1, 2 ];
map!f(filter!condition(list));
}
You can define f and condition within the body of main().
It is possible to use function literals as well:
import std.algorithm;
void main()
{
auto list = [ 0, 1, 2 ];
map!((x){
/* ... this is f(x) ...*/
})(filter!((x) {
return true; /* ... condition ... */
})(list));
}
> 3) D's slice operator apparently doesn't allow the use of a stride other
> than unity as is allowed with fortran and matlab. Is there a way to
> implement this feature so that
>
> [1, 2, 3, 4, 5][0..$:2] would refer to [1, 3, 5], etc..., where 2 is the
> non unit stride. Or is the find function from std.algorithm the only
> option to achieve the same behavior.
std.range.stride does that:
import std.range;
// ...
stride([1, 2, 3, 4, 5], 2)
>
> I find the 3 features above extremely convenient in every day coding.
> Thanks,
> -clk
>
>
Ali
More information about the Digitalmars-d-learn
mailing list