Tất cả các mã có thể được biểu diễn dưới dạng một loạt các hoạt động của Map / Filter / Giảm?


16

Gần đây tôi đã tái cấu trúc các đoạn mã lớn và thay thế chúng bằng các truy vấn Linq.

Xóa bỏ sự thiên vị ngôn ngữ - Linq về cơ bản là một tập hợp các hoạt động của Map / Filter và Giảm hoạt động trên một chuỗi dữ liệu.

Điều này khiến tôi suy nghĩ, về mặt lý thuyết tôi sẽ có thể chịu đựng điều này. Tôi có thể viết lại toàn bộ cơ sở mã thành một chuỗi (hoặc thậm chí là một) các hoạt động của Map / Filter và Giảm bớt.

Thật không may, tôi được trả tiền để làm những thứ hữu ích, vì vậy tôi không thể thử nghiệm nhiều hơn nữa, nhưng tôi không thể nghĩ ra bất kỳ cấu trúc mã nào không thể được cấu trúc lại như vậy. Mã hiệu ứng phụ có thể được xử lý thông qua các đơn vị .. Ngay cả đầu ra về cơ bản là ánh xạ các địa chỉ bộ nhớ thành địa chỉ màn hình.

Có bất cứ điều gì không thể (về mặt lý thuyết) được viết lại như một truy vấn Linq không?


Đối với cây xem tại đây: stackoverflow.com/questions/250377/ Mạnh
blueberryfields

Tôi luôn nghĩ rằng "giảm" là đủ để đảm bảo hoàn thành Turing (bản đồ và bộ lọc có thể được triển khai dưới dạng giảm hoạt động, không?) - ít nhất, ngôn ngữ chức năng tương đương với giảm. Tôi không biết đủ về Linq để chắc chắn việc triển khai theo sát chức năng như thế nào.
blueberryfields

1
Tôi không biết, nhưng một nguyên tắc nhỏ là bất cứ ai thậm chí sẽ cân nhắc việc viết tất cả mã của họ sẽ trở thành Turing hoàn chỉnh. Nhưng hệ quả của điều đó là việc Turing hoàn thành không thú vị lắm.
psr

1
Tôi đồng ý với psr; Tôi nghĩ rằng một câu trả lời hợp lệ cho câu hỏi này cần phải giải quyết tính đầy đủ của Turing. Một bằng chứng có thể cố gắng thực hiện một máy Turing chỉ sử dụng các thao tác này.
Cướp

Suy nghĩ nhàn rỗi: Ngay cả khi chúng tôi cho phép vô nghĩa như thế my_list.map(_ignored => a copy of my_list), có vẻ như việc sử dụng không gian của một chương trình như vậy bị giới hạn bởi một số đa thức (tùy thuộc vào độ dài chương trình). Sau đó, một ngôn ngữ như vậy chắc chắn không thể tính toán các vấn đề không có trong PSPACE. Tuy nhiên, vì nhiều vấn đề trong PSPACE được coi là khó hiểu, nên không nói gì về các lớp lớn hơn, đây có thể không phải là một hạn chế rất nghiêm trọng.

Câu trả lời:


1

Nó được gọi là lập trình chức năng, và được nhiều người coi là một khái niệm nền tảng. Đây là một phần giới thiệu tốt về Joel On Software . Câu trả lời kỹ thuật hơn là không, hiện tại không có cách nào để hỏi các câu hỏi máy tính của bạn (theo cách được xác định rõ) mà không thể được trả lời thông qua tính toán SKI.


1
xa hơn để lập trình chức năng hơn so với các chức năng map, filterreduce(điều này đi ba lần nếu chúng ta bỏ qua Turing đầy đủ và sử dụng ngôn ngữ FP thực tế). Trong thực tế, chúng chỉ khá chung chung và do đó thường hữu ích, nhưng thực sự là những ứng dụng rất đơn giản của lập trình chức năng. Tính toán lambda tối thiểu có thể xác định các chức năng đó trong số nhiều người khác, không phải cách khác.

"Đây là một phần giới thiệu tốt về Joel On Software" - quản lý để nhầm lẫn Fortran với Basic, vì vậy tôi sẽ không đặt nhiều niềm tin vào các sự kiện khác trong đó.
quant_dev
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.