Yinelenebilir ve numaralandırılabilir arasında bir fark var mı?


16

Birçok dilde, yinelenebilir veya numaralandırılabilir olarak adlandırılan çok benzer yapıları vardır. Bunlar yinelenebilen veya numaralandırılabilen, bana çok benzer şeyler gibi görünen yapılardır. Bu kelimeler eşanlamlı mı yoksa terim seçimini haklı kılan, tekrarlanabilir ve numaralandırılabilir arasında ince bir anlamsal fark var mı?


1
Adamın kendisi, Jon Skeet, kitabında C #'ın Yinelenebilir yerine Numaralanabilir ile gittiğini anlatıyor. Bu karar bu tür karışıklığa neden oldu.
RubberDuck

Yanıtlar:


14

IMHO bu bağlama bağlıdır, bazen eşanlamlıdır, bazen değildir. Örneğin, C # 'da yineleyicileri sınıflandıran "IEnumerable" veri türünüz vardır, ancak özellikle yinelemeler için değil, sembolik sabitler için olan "enum" bildirimi de vardır. Diğer programlama dillerinde (veya diğer bağlamlarda) durum benzer olabilir veya olmayabilir.

İki kelimeyi, özellikle programlama dili anahtar kelimeleri olarak değil, İngilizce fiiller olarak kastediyorsanız,

  • yineleme, "bir kümenin tüm öğelerini tek tek döngü" anlamına gelir
  • numaralandırma aracı "bir kümenin her elemanına birer birer sıralı sayı vermek" anlamına gelir

Ve numaralandırma ve numaralandırma için yinelemeye ihtiyaç duyulduğundan, bir tür yinelemeyi ima ettiğinden, bu iki işlem tanımı tipik olarak değiştirilebilir.


3
+1 neden numaralandırmalardan bahsediyorsun? Bir yapı olarak numaralandırma numaralandırılabilirlik için ortoghonal olur mu? Sanırım bir numaralandırmanın doğası "her sabiti bir küme sıralı bir sayı, birer birer vermek" olabilir diyebilirsin ... :)
Marjan Venema

@MarjanVenema: Peki, "enum" anahtar kelimesi enum - erate'den geliyor sanırım?
Doc Brown

D'oh, evet, söyleyebilirim. Tavuk ve yumurtayı yanlış yöne aldım :-)
Marjan Venema

3
@DocBrown - numaralandırma numaralandırma kısaltmasıdır.
Lee

3
@Lee: bu retorik bir soruydu ;-)
Doc Brown

4

Diğerlerinin söylediği gibi, kesin anlambilim, terimleri kullanan programlama diline bağlıdır, bu yüzden tamamen dilbilimsel bir değerlendirme yapacağım.

"Yinelenebilir", "yinelemeye" ve birçok dilin oluşturduğu "yineleyicilere" atıfta bulunan, oldukça yeni bir kelimedir. en temel yineleyici işlevi: her öğeyi bir kez işleme. Ters çevirme, silme, mesafeleri ölçme vb. Desteklenebilir veya desteklenmeyebilir.

"Enumerable" numaralandırılırken şeyler ifade eder edebilirsiniz yineleme aynı anlama, ama dil zaten bu amaçla "iterable" kullanmayan tek eğer. Eğer bir dilin her ikisi de varsa, "numaralandırılabilir" neredeyse kesinlikle başka bir şey, muhtemelen daha güçlü bir şey demektir. Büyük olasılıkla, her öğeyi benzersiz bir sayısal dizinle bağlama fikrini destekleyecek ve muhtemelen rastgele erişime izin verecektir (örneğin, birinci öğeyi ikinci ve ikinci öğeden önce almak).

Bu, sadece kelimelerden makul bir şekilde çıkarım yapabileceğiniz tüm anlamla ilgilidir. Herhangi bir somut durumda, standart kütüphane API belgelerine bakın.


1

Her iki terimin de kesin tanımına odaklanmak istiyorum

Iterable şeyleri yinelemek ve öğeye tek tek erişmektir.

Terimin Enumerabletorna makinesinden kaynaklandığını düşünüyorum . Bu, öğeyi uygun bir sırayla tek tek listeleme yeteneğiyle ilgilidir. Olaylar tek tek listelenebilir countable, her birinin benzersiz bir yazışma endeksi vardır. Bir öğe verildiğinde, benzersiz bir dizin elde edebilirsiniz. Bir dizin verildiğinde, bu dizinle ilişkilendirilmiş olası bir öğeyi bulabilirsiniz.

Başka bir deyişle, Enumerableelemanları üretme yeteneğini ifade eder. Örneğin bazı programlama dilleri Haskellbu fikri hayata geçirdi. Bir Enum türü sınıfı vardır ve Charbir örnektir.

Prelude> fromEnum True
1
Prelude> fromEnum False
0
Prelude> toEnum 1 :: Bool
True

Prelude> fromEnum 'a'
97
Prelude> enumFromTo 'a' (toEnum 122 :: Char)
"abcdefghijklmnopqrstuvwxyz"

-1

sayım sayılıyor, yineleme tekrar ediyor

ikinci bir numaralandırma aynı sayıyı verir, bir yineleme bir varyasyon olabilir

Fraktallar bir işlevin yinelemeleri ile oluşturulur, son yinelemenin sonucunda işlevi tekrarlar, her yinelemenin farklı bir değeri vardır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.