http://d.puremagic.com/issues/show_bug.cgi?id=4591
[email protected] changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|[email protected] |[email protected] --- Comment #2 from [email protected] 2013-05-14 09:49:37 PDT --- I suggest to add the support for Tuple concatenation and join: In Python 2.6: >>> t1 = (1, 2) >>> t1 + t1 (1, 2, 1, 2) >>> t1 + (3,) (1, 2, 3) Proposed D syntax: void main() { import std.typecons; auto t1 = tuple(1, 2); auto t2 = t1 ~ t1; auto t3a = t1 ~ 3; auto t3b = t1 ~ tuple(3); } An use case, this computes the frequency of the first digit (Benford's Law): import std.stdio, std.range, std.math, std.conv, std.bigint, std.algorithm; auto benford(R)(R data) { auto heads = data.filter!q{a != 0}.map!q{ a.text[0] - '1' }.array; immutable double k = heads.length; return iota(1, 10) .zip(heads.sort().group.map!(p => p[1] / k)) .map!q{ [a[]] ~ log10(1.0 + 1.0 / a[0]) }; } void main() { auto fibs = recurrence!q{a[n - 1] + a[n - 2]}(1.BigInt, 1.BigInt); writefln("%9s %9s %9s", "Actual", "Expected", "Deviation"); foreach (p; fibs.take(1000).benford) writefln("%1.0f: %5.2f%% | %5.2f%% | %5.4f%%", p[0], p[1] * 100, p[2] * 100, abs(p[2] - p[1]) * 100); } Currently the benford() function returns a range of double[]: .map!q{ [a[]] ~ log10(1.0 + 1.0 / a[0]) }; If I want to return a range of 3-tuples: .map!q{ tuple(a[], log10(1.0 + 1.0 / a[0])) }; With the proposed syntax the code becomes: .map!q{ a ~ log10(1.0 + 1.0 / a[0]) }; Or: .map!q{ a ~ tuple(log10(1.0 + 1.0 / a[0])) }; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
