2011-06-05 23 views
26

編程在斯卡拉」解釋說,元組爲什麼Scala元組的索引爲1?

_N數字是基於一個,從零開始,而不是,因爲從1開始是 一個傳統,其他語言 這樣的靜態類型的元組集作爲 Haskell和ML

但這很難被稱爲解釋

爲什麼元組在哈斯克爾和ML中首先定義爲基於1的元組? 有基於1的索引元組而不是基於0的數學/編程好處嗎?

感謝, 大利

+5

基於1的索引在數學上證明速度更快。 – 2011-06-05 08:20:14

+1

@pelotom,我會說基於0的速度更快。唯一的區別是,在基於1的情況下,你會爲​​第10個元素寫10而不是9。 10是比9更多的字符可讀和解析! ;-) – aioobe 2011-06-05 08:59:58

+2

@aioobe:當然,「10」的分析速度比「9」慢得多,但你多久訪問一個元組的第10個元素?對於常見情況,「1」提供了對元組第一個元素的更快訪問,因爲它比「0」需要更少的像素繪製。 – 2011-06-05 20:12:24

回答

19

我猜_1_2等它是短期的 「第一」, 「第二」,等等。 (例如,fstsnd歷史上曾用於訪問元組的左側和右側部分)。在另一方面,一個陣列的索引是偏移和第一元件通常爲0偏移量

是否有在具有任何數學/編程好處1基於索引的元組和不0-根據?

不是。無論如何,這些元素不是以編程方式訪問的。 (如果i是整數,則不能這樣做_i

+7

全部正確,直到最後一句。可以使用Product.productElement(n)以編程方式訪問元素...與基於n 0的,例如tuple.productElement(3)== tuple._4 – jsalvata 2011-11-08 23:10:01

4

也許Haskell和ML使用了基於1的元組,因爲COBOL, Algol, and FORTRAN used 1-based arrays。傳統是一個有趣的事情...

+3

Algol68允許程序員從任何下限索引數組,索引默認值爲1. c.f. Van Wijngaarden:''讓我給你推銷一種語言',他開始了,並着手概述語言背後的想法。他舉了一些例子。 「你能定義三角陣列嗎?」某人(託尼霍爾?)打斷了。 「不僅僅是三角形的,而且還是橢圓形的,」阿德回答道,並且展示了「如何從」ALGOL 68的製作「中找到」http://www.cs.ru.nl/~kees/home/papers/psi96.pdf – NevilleDNZ 2011-06-09 01:34:14

+1

@ NevilleDNZ,有趣的閱讀,謝謝! – sarnold 2011-06-09 01:56:16

3

0基於事情是偉大的,當你想與指數做數學。它只適用於基於1的索引。

然而,除了計算機愛好者之外,所有人都更加自然。

元組旨在包含完全不同的東西。因此,做一些類似於添加此元素的索引並將其添加到該元素的索引並獲得具有所得索引的元素對元組來說沒有意義的東西。

因此,我會說元組是基於1的,因爲這是自然而然的事情,沒有理由不這樣做。

+11

那麼,斯卡拉元組*的用戶是*「電腦極客」:) 有兩種類型的索引方案在同一種語言中的結果是,還有一件事要記住,我覺得有點煩人。 – Ori 2011-06-06 12:06:58

相關問題