Почему индексы Scala кортежей основаны на 1?
"Программирование В Scala" объясняется, что кортежи
_N числа основаны на одном, а не на нулевом уровне, поскольку начиная с 1 традиция, установленная другими языками с статически типизированными кортежами, такими как Haskell и ML
но это вряд ли можно назвать объяснением.
Почему кортежи были определены как 1 на основе Haskell и ML в первую очередь?
Существуют ли какие-либо математические/программные преимущества при использовании индексированных кортежей на основе 1, а не на основе 0?
Спасибо,
Ori
Ответы
Ответ 1
Я думаю, _1
, _2
и т.д. это сокращение от "первого", "второго" и т.д. (fst
и snd
, например, исторически использовались для доступа к левой и правой части кортежа). Индекс в массиве, с другой стороны, является смещением, а первый элемент обычно имеет смещение 0.
Есть ли какие-либо математические/программные преимущества при использовании индексированных кортежей на основе 1, а не на основе 0?
Нет. В любом случае элементы не имеют доступа к программному обеспечению. (Вы не можете сделать _i
, если i
- целое число.)
Ответ 2
Возможно, Haskell и ML использовали 1-основанные кортежи, потому что COBOL, Algol и FORTRAN использовали 1-х массивные массивы. Традиция - забавная вещь...
Ответ 3
0 основаны на том, что отлично, когда вы хотите делать математику с индексом. Он просто не работает с 1 базирующимися индексами.
Однако для всех, кроме компьютерных гиков 1, гораздо более естественным.
Кортежи предназначены для того, чтобы содержать совершенно разные вещи. Так что сделайте что-то вроде добавления индекса этого элемента и добавьте его в индекс этого элемента и получив элемент с результирующим индексом, не имеет смысла для кортежей.
Поэтому я бы сказал, что кортежи основаны на 1, потому что это естественная вещь, и нет причин не делать этого.