CJS:

I'm trying to write a D function that does the same as this Python function:

def cross(A, B):
    "Cross product of elements in A and elements in B."
    return [a+b for a in A for b in B]

where A and B are strings. (So cross("ab","12") is ["a1", "b1", "a2", "b2"]).

One solution:


import std.stdio, std.conv, std.algorithm, std.array;

string[] cross(in string A, in string B) {
    return cartesianProduct(A, B).map!(ab => ab[].text).array;
}

void main() {
    cross("ab", "12").writeln;
}


But note that currently cartesianProduct doesn't return the pairs in a natural order.

cross() should be pure.

Bye,
bearophile

Reply via email to