A Final Note on Pragmatism
Arrays exist at the intersection of functional purity and practical necessity. They’re not the most elegant solution—that honor belongs to lists and their recursive majesty. They’re not the most efficient—native arrays in imperative languages still reign supreme in raw performance. But they occupy a useful middle ground where indexed access meets functional immutability, where zero-based counting meets Erlang’s conventions, where theory meets the real world and they shake hands somewhat awkwardly before getting on with the job.
Use them when they make sense. Avoid them when they don’t. And try not to lose too much sleep over the zero-based indexing. After all, in the grand scheme of things, whether you start counting at zero or one is merely a question of where you happened to begin—and in a universe as bewilderingly vast as ours, starting from zero seems as reasonable a choice as any.