Denis Shelomovskij:

D already have undocumented[1] front tuple expansion in foreach over range:
---
import std.algorithm;
import std.stdio;

void main() {
    enum s = "this is an example for huffman encoding"d;
    foreach (c, n; s.dup.sort().release().group())
        writefln("'%s'  %s", c, n);
}


I know, but it doesn't work in the case of my code I have shown, with a SortedRange of 2-tuples:

void main() {
    auto s = "this is an example for huffman encoding"d;
    foreach (c, n; s.dup.sort().release.group.encode)
        writefln("'%s'  %s", c, n);
}

---------------------------

Jacob Carlborg:

auto (lof, loa) = heap.front;

How is front suddenly returning two elements?

It is not returning two elements. In D you can't return two elements. It is returning a 2-Tuple. You see the 2-tuples are built by the map() and then used to create a heap:

auto heap = sf.map!(((c, f)) => tuple(f, ...)).array.heapify!q{...};


And this proposed syntax performs pattern matching on that 2-tuple, unpacking it into two variables (Hara has implemented this already):

auto (lof, loa) = ...;

In Haskell, Scala, Python, F#, etc, the semantics and syntax are similar.

Bye,
bearophile

Reply via email to