3 ms·
They are both used to generate a sequence of consecutive integers, although Go's iota starts at 0 whereas APL's starts at 1. "Ken suggested iota for the counte
by nemo1618 8y ago
They are both used to generate a sequence of consecutive integers, although Go's iota starts at 0 whereas APL's starts at 1.
"Ken suggested iota for the counter and, since all three of us (Ken, Robert, Rob) had implemented APL interpreters, it seemed a perfect thing to us." - Rob Pike
- ceautery 8y agoI think iota in APL can start at zero if you set the index origin (⎕IO) to 0.
- 4thaccount 8y agoYes it can. I ran into an issue with one of the APL examples once because the index had been changed and it wasn't documented. The Dyalog folks answered my email on the weekend (I'm not a customer).
- kbenson 8y agoThat sounds like one of those super useful features that's easy to shoot yourself in the foot with. Perl has a few of those (cribbed from AWK, I believe): $, : The output field separator $ perl -E 'my @data = (11,22,33); say 11,22,33; say "@data"; say @data; $,="|"; say 11,22,33; say "@data"; say @data;' 112233 11 22 33 112233 11|22|33 11 22 33 11|22|33 $" : Interpolated list separator $ perl -E 'my @data = (11,22,33); say 11,22,33; say "@data"; say @data; $"="|"; say 11,22,33; say "@data"; say @data;' 112233 11 22 33 112233 112233 11|22|33 112233 And a bunch more, including input line/record separators (so you can slurp a whole file into a buffer at once instead of line by line), etc.
- boomlinde 8y ago> They are both used to generate a sequence of consecutive integers, although Go's iota starts at 0 whereas APL's starts at 1. Iota in APL is unary operator that generates a vector of consecutive integers starting at the origin up to and including its operand. Iota in Go is a predeclared identifier that can only be used in constant declarations wherein it auto-increments on every use. The resemblance is superficial at best. > "Ken suggested iota for the counter and, since all three of us (Ken, Robert, Rob) had implemented APL interpreters, it seemed a perfect thing to us." - Rob Pike Maybe we have just have a different view on what "modeled" means, or I am being too literal. To me, "modeling" implies that something is created with another thing in mind, adhering to the same principles. To relate that to the quote, I wouldn't call the process of coming up with a concept and only afterwards finding a name for it from some handwavely similar concept in another context modeling.
- nemo1618 8y agoNo, I think your criticism is fair. "Modeled" is not quite accurate, since the term was applied retroactively to functionality that was already implemented. Still, I wouldn't call the resemblance superficial. "iota" in both languages refers to sequences of whole numbers. If "iota" in Go meant "the zero-value for an arbitrary object" or "the smallest non-zero float64," then the two would truly share only a name.
- boomlinde 8y agoIf there are more than superficial similarities between the two, surely there is a rough analogue for "⍳10" in Go using its iota. Conversely there must be an analogue for "const ( A = iota; B; C )" in APL using its iota. Those are the fundamental uses of these entirely (IMO) different concepts. In the latter case, you can say that "A B C←⍳3" (at least in Dyalog) which is roughly equivalent to a Go constant assignment using iota if you squint a little and disregard the underlying procedure of creating and unpacking an array at run-time vs creating a compile-time constant. In the former case, I'm not aware of any analogue.