Nguồn gốc của tên hàm xử lý danh sách phổ biến


11

Một số hàm bậc cao hơn để vận hành trên danh sách hoặc mảng đã được lặp đi lặp lại hoặc được phát minh lại. Các bản đồ chức năng , gấp [ l | r ] và bộ lọc được tìm thấy cùng nhau trong một số ngôn ngữ lập trình, như Scheme, ML và Python, dường như không có tổ tiên chung. Tôi sẽ dùng ba tên này để tập trung vào câu hỏi.

Để chỉ ra rằng các tên không phổ biến, đây là một mẫu các tên cho chức năng tương đương trong các ngôn ngữ khác. C ++ đã biến đổi thay vì ánh xạremove_if thay vì bộ lọc (đảo ngược ý nghĩa của vị từ). Lisp có mapcar thay vì bản đồ , remove-if-không thay bộ lọc , và giảm thay vì lần (Một số Lisp hiện đại biến thể có bản đồ nhưng xuất hiện này là một hình thức có nguồn gốc .) C # sử dụng Chọn thay đồở đâu thay vìbộ lọc . Tên của C # đến từ SQL thông qua LINQ và mặc dù tên thay đổi, chức năng của chúng bị ảnh hưởng bởi Haskell, chính nó bị ảnh hưởng bởi ML.

Bản đồ tên , nếp gấpbộ lọc là phổ biến, nhưng không phổ biến. Điều này cho thấy rằng họ đã được mượn từ một nguồn có ảnh hưởng sang các ngôn ngữ đương đại khác. Những tên hàm này đến từ đâu?


10
mapsẽ đến từ lý thuyết tập hợp toán học, mô tả các phép biến đổi tập hợp là "ánh xạ" từ miền đầu vào sang phạm vi đầu ra.
Aidan Cully

2
Lisp's mapcarlà một bản đồ, trên xe (chứ không phải là cdr).

gấp có tên của nó bởi vì trong lý thuyết tập hợp, nó được gọi là catamorphism nhưng điều đó hoàn toàn vô lý. Ngoài ra Foldl là Uẩn trong LINQ, một lần nữa từ thuật ngữ SQL.
Jimmy Hoffa

2
Cũng lưu ý rằng trong khi những ngôn ngữ đó không có tổ tiên chung chính thức, thì hoàn toàn có rất nhiều ảnh hưởng, qua lại. Guido van Rossum đã hoàn thành bài tập về nhà khi anh bắt đầu thiết kế Python và Scheme, Common Lisp, Perl và (IIRC) Haskell và ML đã xuất hiện vào thời điểm đó.
tdammers

1
filterthực hiện chính xác điều đó - nó lọc dữ liệu. Có vẻ khá rõ ràng.
Dukeling

Câu trả lời:


3

Từ phổ quát duy nhất trong danh sách của bạn là mapvà nó đã xuất hiện trong bài báo gốc về Lisp năm 1960 (dưới vỏ bọc maplist). Bài báo cũng có search(AKA filter, AKA remove-if-not).

Tôi nghĩ lý do maptồn tại trong khi các biến thể khác có các biến thể mapxuất phát từ toán học tương đối cổ xưa, thành lập, phổ biến trong khi catamorphism(AKA reduceAKA fold& c) là một khái niệm tương đối tiên tiến, từ một miền tương đối mơ hồ được phát triển gần đây (ít nhiều đồng thời với CS) và nó đã được giới thiệu (vào cuối những năm 1980) khi đã có mặt ở Lisp trong hơn một thập kỷ .reduce

Những người khác ( filterAKA remove-if-not) thậm chí còn đặc biệt hơn trong lập trình CS / lập trình, vì vậy mọi người thậm chí còn cảm thấy thoải mái hơn khi chọn tên riêng cho họ.


1
Đừng mơ hồ đề cập đến lý thuyết Danh mục là "một miền được phát triển gần đây tối nghĩa" cũng là về "tính phát triển gần đây" như tính toán của Lambda .
Dan D.

@DanD.: Từ khóa tương đối
sds

Ngay cả sau đó, tất cả chúng đều bị lỗi trong .NET để chúng giống với SQL. (bản đồ -> Chọn; bộ lọc -> Ở đâu; gấp -> Tổng hợp)
Steven Evers
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.