Những loại vấn đề GIS nào lập trình chức năng giải quyết?


8

Sau khi đọc bài đăng @ray vernagus về việc sử dụng ArcObjects với F # , tôi đã tự hỏi ... loại vấn đề nào được xử lý tốt hơn bởi Lập trình chức năng , trái ngược với các hình thức lập trình truyền thống hơn?

Có lẽ cụ thể hơn, khi nào tôi sẽ tốt hơn khi sử dụng F # trái ngược với C # với ArcObjects?


Có lẽ mô hình mà người ta chọn phụ thuộc vào những gì người ta dự định lập trình, một trong các liên kết của bạn chứa các tham chiếu đến các mô hình thay thế và so sánh những gì họ phù hợp với en.wikipedia.org/wiki/Comparison_of_programming_paradigms

@DanPatterson Cảm ơn bạn đã phản hồi. Những gì tôi muốn thấy là các vấn đề cụ thể về GIS trong đó F # phù hợp hơn C #. Nếu tôi có thể thấy điều đó, thì tôi có thể biện minh cho thời gian đầu tư để tìm hiểu nó. Tôi đã có một nghi ngờ lén lút rằng những thứ như đại số bản đồ và người giải quyết luồng mạng là những ứng cử viên tốt, nhưng chưa thấy nghiên cứu trường hợp nào.
Kirk Kuykendall

1
"Đại số bản đồ" (từ những năm 1980) lập trình chức năng.
whuber

@whuber Theo tôi hiểu lập trình chức năng, nó cho phép những gì chúng ta thường nghĩ là công thức, được coi là dữ liệu. Bảng tính, ví dụ, làm điều này. Tôi không thấy một cách để gán một chức năng cho một tế bào raster. Có vẻ như điều này có thể được sử dụng để tạo ra một thứ gì đó giống như bản đồ phân vùng. Mỗi loại phân vùng có thể có một chức năng phù hợp khác nhau. Với các đơn vị như doanh thu thuế tài sản. Các đầu vào có thể bao gồm phân vùng xung quanh. Khoanh vùng một bưu kiện là khu dân cư có thể không mang lại nhiều doanh thu thuế khi gần khu vực công nghiệp được phân vùng.
Kirk Kuykendall

Tôi tin rằng bạn đang nghĩ về một cái gì đó khác biệt, gần giống với "tính toán trên các chức năng". Theo [Wikipedia], lập trình chức năng là "mô hình lập trình coi việc tính toán là đánh giá các hàm toán học và tránh trạng thái và dữ liệu có thể thay đổi". Đại số bản đồ, hầu hết tất cả đều bao gồm các hàm thuần túy, là một ví dụ đơn giản (nhưng hạn chế) về điều này. Việc thay thế, giả sử, lặp qua các ô trong Python ngược lại với lập trình chức năng. Mô FP mạnh tồn tại trong RMathematica , trong đó cung cấp nhiều ví dụ liên quan đến GIS.
whuber

Câu trả lời:


4

Lý do lớn nhất khiến chương trình chức năng trở lại thịnh hành gần đây là sự đồng thời. Có thể xử lý song song vì lý do hiệu năng đang trở nên cực kỳ quan trọng trong việc tính toán tổng thể và GIS cũng không ngoại lệ. Lập trình hàm có một số lợi ích nghiêm trọng trong bối cảnh tạo ra các hệ thống song song vì mức độ nhấn mạnh tính bất biến và đệ quy của nó. Do các tính chất này, hầu hết các ngôn ngữ chức năng có xu hướng đơn giản là vượt qua các vấn đề như khóa khiến việc lập trình song song trong các ngôn ngữ bắt buộc trở thành vấn đề đau đầu.

Điều đó đang được nói, tôi nghĩ rằng lĩnh vực GIS còn một chặng đường dài trước khi bạn thực sự có thể tận dụng rất nhiều những gì lập trình chức năng cung cấp. Các công nghệ và thư viện hiện tại đơn giản là quá cố định về Định hướng đối tượng và một cách tiếp cận thường bắt buộc. Đáng buồn thay, chỉ vì bạn có thể sử dụng ArcObjects từ F # không nhất thiết có nghĩa là các thư viện cơ bản sẽ thực sự chơi tốt với phong cách lập trình chức năng.


3

Không nghiêm túc lập trình, nhưng ArcToolbox tuân theo mô hình thiết kế nhiều chức năng hơn.

  • Hầu hết các công cụ được thiết kế để chấp nhận một tập hợp các đầu vào, chạy một hàm và trả về các đầu ra mà không chịu ảnh hưởng của trạng thái bên ngoài.
  • Hầu hết các công cụ không chỉnh sửa các lớp hiện có, nhưng tạo ra các lớp mới (tính bất biến).
  • Nhiều công cụ tương tự như hoạt động với chức năng bản đồ. Chúng hoạt động trên các bộ đối tượng (bộ tính năng) thay vì sử dụng phép lặp để xử lý các đối tượng cấp thấp hơn (hình học).
  • Các công cụ cơ bản như hợp nhất, giao nhau và giải thể có thể giải quyết nhiều vấn đề khó diễn đạt bằng ngôn ngữ khai báo như SQL.

Cách tiếp cận chức năng của ArcToolbox cho phép chúng tôi phân tích không gian mà không cần phải viết mã. Người dùng có thể làm việc với một tập hợp các yếu tố đơn giản như các lớp và không phải lo lắng về việc lặp lại, duy trì trạng thái hoặc các tác dụng phụ phức tạp.


2

Bản thân tôi mới lập trình chức năng nên đây chỉ là một vài suy nghĩ.

Có một ví dụ thú vị về Ray Tracer trong F # minh họa một số điểm mạnh của lập trình chức năng, cụ thể là các hàm bậc cao , đệ quy , song songkhớp mẫu . Mở rộng một số khái niệm đó có vẻ như toán học raster là một lĩnh vực quan trọng trong GIS mà lập trình chức năng có thể đặc biệt phù hợp.

nhập mô tả hình ảnh ở đây

chỉnh sửa: Đây là một ví dụ khác từ cùng một trang: Quy tắc 30 Cellular Automata

Một suy nghĩ khác là bạn không phải viết toàn bộ chương trình của mình trong F #. Bạn có thể có chương trình chính được viết bằng C # và tạo các dự án / tập hợp trong F # để giải quyết các vấn đề lập trình chức năng cụ thể. Tôi đã đọc, bạn cũng có thể sử dụng ILMerge để hợp nhất C # và F # thành một tập hợp / thực thi.

Cuối cùng, có rất nhiều thứ lập trình chức năng bạn có thể làm trong C # với LINQ , thông qua việc sử dụng các biểu thức lambda , chức năng bậc cao ( Select, Where, vv), chuỗi khớp mẫu, vv


Cảm ơn các liên kết đến các tia đánh dấu. Đã tự do thêm hình ảnh vào câu trả lời của bạn.
Kirk Kuykendall
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.