From Zip to Convolution to Tuple

Reading about Linq's Enumerable.Zip lead me to read about convolution, which led me to read about the tuple.

Zip is often a synonym for convolution. Convolution

So what's a tuple?

As someone with C# experience, I think of a tuple as a struct with unnamed properties. While the analogy eventually breaks down, it succeeds at developing intuition. Note: a tuple is more like a struct than a class, because we generally make a struct immutable.

Couple rhymes with tuple. The word tuple comes from the suffix of numbers of grouped things. For example, when we reach five items we have a quintuple. Eventually we just say n-tuple, which is like multiple.

Tuples differ from sets in that:

Tuples differ from (ordered) lists too, because we attach more meaning to the index of a tuple item than we do to a list item. In an ordered list, for instance, we might interpret the item at index two as coming before the item at index three. In a tuple, though, an item's index acts more like a struct's property; for instance, a 3-tuple that represents a sentence might have the Subject at index one, the Verb at index two, and the Object at index three. The semantics of a list is called homogenous (an item is an item is an item) and the semantics of a tuple is called heterogenous (because an item is a Subject, or an Object, or a Verb, or a whatever...)

In addition to having richer semantics than lists do, tuples are immutable whereas lists are mutable. For all those reasons, the following struct and tuple could have the same meaning.

var sentence = new Sentence // Sentence is a struct
{
    Subject = "Shaun";
    Verb = "eats";
    Object = "papaya";
};

var sentence = Tuple.Create("Shaun", "eats", "papaya");

Now, it's time for me to head back to learning about Enumerable.Zip .