Có một sự khác biệt giữa lặp đi lặp lại và vô số?


16

Nhiều ngôn ngữ dường như có các cấu trúc rất giống nhau được gọi là lặp hoặc liệt kê. Đây là những cấu trúc có thể được lặp đi lặp lại hoặc liệt kê ra, dường như đối với tôi những điều cực kỳ giống nhau. Là những từ này đồng nghĩa hay có một sự khác biệt ngữ nghĩa tinh tế giữa lặp lại và vô số mà biện minh cho sự lựa chọn của thuật ngữ?


1
Bản thân người đàn ông, Jon Skeet, than thở trong cuốn sách của mình rằng C # đã đi với Enumerable thay vì Iterable. Quyết định đó đã dẫn đến rất nhiều loại nhầm lẫn này.
RubberDuck

Câu trả lời:


13

IMHO điều này phụ thuộc vào bối cảnh, đôi khi chúng đồng nghĩa, đôi khi không. Ví dụ: trong C #, bạn có kiểu dữ liệu "IEnumerable", phân loại các trình lặp, nhưng bạn cũng có khai báo "enum" dành cho các hằng số tượng trưng, ​​không dành riêng cho các lần lặp. Trong các ngôn ngữ lập trình khác (hoặc các bối cảnh khác), tình huống có thể tương tự hoặc không.

Nếu bạn có nghĩa là hai từ giống như động từ tiếng Anh và không cụ thể là từ khóa ngôn ngữ lập trình, thì

  • lặp có nghĩa là "lặp qua tất cả các yếu tố của một tập hợp, từng cái một"
  • liệt kê có nghĩa là "cung cấp cho mỗi phần tử của một tập hợp số thứ tự, từng cái một"

Và vì việc lặp lại là cần thiết cho việc liệt kê và việc liệt kê hàm ý một số loại lặp lại, hai mô tả quá trình đó thường có thể được thay thế cho nhau.


3
+1 tại sao bạn lại đề cập đến enums? Enum như là một cấu trúc sẽ được ortoghonal để enumarility? Mặc dù tôi đoán bạn có thể nói rằng bản chất của một enum sẽ là "đưa ra mỗi hằng số trong một số thứ tự, từng cái một" ... :)
Marjan Venema

@MarjanVenema: tốt, từ khóa "enum" xuất phát từ enum - erate, tôi đoán vậy?
Doc Brown

D', ya, tôi sẽ nói như vậy. Tôi đã lấy gà và trứng của tôi sai cách vòng :-)
Marjan Venema

3
@DocBrown - enum là viết tắt của liệt kê.
Lee

3
@Lee: đó là một câu hỏi tu từ ;-)
Doc Brown

4

Như những người khác đã nói, ngữ nghĩa chính xác phụ thuộc vào ngôn ngữ lập trình sử dụng các thuật ngữ, vì vậy tôi sẽ đưa ra một đánh giá ngôn ngữ thuần túy.

"Iterable" là một từ được tạo ra khá mới, rõ ràng đề cập đến "lặp" và "lặp" mà nhiều ngôn ngữ đã tạo ra. Do đó, các loại như vậy gần như chắc chắn hỗ trợ một trình lặp, nhưng không nhất thiết là bất cứ điều gì khác, và không nhất thiết là bất cứ điều gì khác chức năng lặp cơ bản nhất: xử lý mỗi mục một lần. Đảo ngược, xóa, đo khoảng cách, vv có thể hoặc không thể được hỗ trợ.

"Vô số" đề cập đến việc liệt kê những thứ, có thể có nghĩa tương tự như lặp, nhưng chỉ khi ngôn ngữ không sử dụng "lặp lại" cho mục đích đó. Nếu một ngôn ngữ có cả hai, "vô số" gần như chắc chắn có nghĩa là một thứ khác, có thể là thứ gì đó mạnh mẽ hơn. Nhiều khả năng, nó sẽ hỗ trợ khái niệm kết nối mỗi phần tử với một chỉ số số duy nhất và có thể nó sẽ cho phép truy cập ngẫu nhiên (ví dụ: truy xuất phần tử thứ ba trước phần tử thứ nhất và thứ hai).

Đó là về tất cả các ý nghĩa mà bạn có thể suy luận hợp lý chỉ từ các từ. Trong mọi tình huống cụ thể, hãy tham khảo tài liệu API thư viện chuẩn.


1

Tôi muốn tập trung vào định nghĩa chặt chẽ của cả hai thuật ngữ

Iterable là để lặp lại mọi thứ và có được quyền truy cập từng phần tử một.

Tôi nghĩ rằng thuật ngữ Enumerablenày có nguồn gốc từ máy tiện. Đó là về khả năng liệt kê từng phần tử theo thứ tự đúng. Những thứ có thể được liệt kê ra từng cái một countable, mỗi thứ có một chỉ số tương ứng duy nhất. Đưa ra một yếu tố, bạn có thể nhận được một chỉ mục duy nhất. Đưa ra một chỉ mục, bạn chỉ có thể tìm thấy một yếu tố có thể liên quan đến chỉ mục đó.

Nói cách khác, Enumerablengụ ý khả năng tạo ra các yếu tố. Một số ngôn ngữ lập trình, ví dụ, Haskellđã thực hiện ý tưởng này. Có một loại loại Enum , và Charlà một ví dụ.

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

liệt kê là đếm, lặp đi lặp lại

phép liệt kê thứ hai sẽ mang lại cùng một số, phép lặp có thể là một biến thể

fractals được xây dựng bởi các lần lặp của hàm, lặp lại hàm trên kết quả của lần lặp cuối cùng, mỗi lần lặp có một giá trị khác nhau

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.