Apa jenis masalah GIS yang alamat pemrograman fungsional?


8

Setelah membaca postingan @ray vernagus tentang menggunakan ArcObjects dengan F # , saya bertanya-tanya ... jenis masalah SIG apa yang lebih baik ditangani oleh Pemrograman Fungsional , yang bertentangan dengan bentuk pemrograman yang lebih tradisional?

Mungkin lebih khusus, kapan saya akan lebih baik menggunakan F # dibandingkan dengan C # dengan ArcObjects?


Mungkin paradigma yang dipilih tergantung pada apa yang ingin diprogram, salah satu tautan Anda berisi referensi ke paradigma alternatif dan perbandingan apa yang cocok untuk en.wikipedia.org/wiki/Comparison_of_programming_paradigms

@DanPatterson Terima kasih atas umpan baliknya. Yang ingin saya lihat adalah masalah SIG khusus di mana F # lebih cocok daripada C #. Jika saya bisa melihat itu, maka saya mungkin dapat membenarkan menginvestasikan waktu untuk mempelajarinya. Saya punya kecurigaan yang menyelinap bahwa hal-hal seperti aljabar peta dan pemecah aliran jaringan adalah kandidat yang baik, tetapi hanya belum melihat studi kasus.
Kirk Kuykendall

1
"Peta aljabar" (dari tahun 1980-an) adalah pemrograman fungsional.
whuber

@whuber Ketika saya mengerti pemrograman fungsional, ini memungkinkan apa yang biasanya kita anggap sebagai rumus, untuk diperlakukan sebagai data. Spreadsheet, misalnya, lakukan ini. Saya tidak melihat cara untuk menetapkan fungsi ke sel raster. Sepertinya ini bisa digunakan untuk membuat sesuatu yang lebih rasional seperti peta zonasi. Setiap kategori zonasi dapat memiliki fungsi kesesuaian yang berbeda. Dengan unit seperti pendapatan pajak properti. Input mungkin termasuk zonasi di sekitarnya. Zonasi parsel sebagai hunian mungkin tidak menghasilkan pendapatan pajak sebanyak saat berada di dekat kawasan industri yang dikategorikan.
Kirk Kuykendall

Saya percaya Anda memikirkan sesuatu yang berbeda, lebih mirip dengan "menghitung fungsi." Menurut [Wikipedia], pemrograman fungsional adalah "paradigma pemrograman yang memperlakukan komputasi sebagai evaluasi fungsi matematika dan menghindari keadaan dan data yang bisa berubah." Peta aljabar, yang hampir semuanya terdiri dari fungsi murni, adalah contoh langsung (tapi terbatas) dari ini. Alternatif, katakanlah, pengulangan sel dengan Python adalah kebalikan dari pemrograman fungsional. Paradigma FP yang kuat ada sekarang Rdan Mathematica , yang memberikan banyak contoh terkait GIS.
whuber

Jawaban:


4

Satu-satunya alasan terbesar mengapa pemrograman fungsional kembali ke mode akhir-akhir ini adalah konkurensi. Mampu melakukan pemrosesan secara paralel karena alasan kinerja menjadi sangat penting dalam komputasi secara keseluruhan dan GIS tidak terkecuali. Pemrograman fungsional memiliki beberapa manfaat serius dalam konteks menciptakan sistem paralel karena seberapa banyak penekanannya pada keabadian dan rekursi. Karena sifat-sifat ini sebagian besar bahasa fungsional cenderung hanya menghindari masalah seperti penguncian yang membuat pemrograman paralel dalam bahasa imperatif menjadi sakit kepala besar.

Yang sedang berkata, saya pikir bidang GIS memiliki jalan panjang sebelum Anda benar-benar dapat mengambil keuntungan dari banyak apa yang pemrograman fungsional tawarkan. Teknologi dan perpustakaan yang ada terlalu terfokus pada Orientasi Objek dan pendekatan yang umumnya penting. Sayangnya, hanya karena Anda dapat menggunakan ArcObjects dari F # tidak berarti pustaka yang mendasarinya akan benar-benar bermain bagus dengan gaya pemrograman fungsional.


3

Tidak hanya pemrograman, tetapi ArcToolbox mengikuti paradigma desain yang lebih fungsional.

  • Sebagian besar alat dirancang untuk menerima serangkaian input, menjalankan fungsi, dan mengembalikan output tanpa pengaruh keadaan eksternal.
  • Sebagian besar alat tidak mengedit lapisan yang ada, tetapi membuat yang baru (kekekalan).
  • Banyak alat serupa dalam operasi dengan fungsi peta. Mereka beroperasi pada set objek (set fitur) daripada menggunakan iterasi untuk memproses objek tingkat bawah (geometri).
  • Alat dasar seperti union, intersect, dan larut dapat memecahkan banyak masalah yang akan sulit untuk diungkapkan dalam bahasa deklaratif seperti SQL.

Pendekatan fungsional ArcToolbox memungkinkan kita melakukan analisis spasial tanpa perlu menulis kode. Pengguna dapat bekerja dengan sekumpulan elemen sederhana seperti lapisan, dan tidak khawatir tentang iterasi, mempertahankan status, atau efek samping yang rumit.


2

Saya sendiri baru mengenal pemrograman fungsional jadi ini hanya beberapa pemikiran.

Ada contoh yang menarik dari Ray Tracer di F # yang menggambarkan beberapa kekuatan pemrograman fungsional, yaitu fungsi tingkat tinggi , rekursi , paralelisme , dan pencocokan pola . Memperluas beberapa konsep-konsep itu akan tampak bahwa matematika raster adalah salah satu bidang utama dalam GIS yang mungkin cocok untuk pemrograman fungsional.

masukkan deskripsi gambar di sini

sunting: Berikut contoh lain dari situs yang sama: Aturan 30 Cellular Automata

Pikiran lain adalah bahwa Anda tidak perlu menulis seluruh program Anda dalam F #. Anda dapat memiliki program utama ditulis dalam C # dan membuat proyek / rakitan dalam F # yang memecahkan masalah pemrograman fungsional spesifik. Saya pernah membaca Anda juga dapat menggunakan ILMerge untuk menggabungkan C # dan F # menjadi satu yang dapat dieksekusi / perakitan.

Terakhir, ada banyak hal pemrograman fungsional yang dapat Anda lakukan di C # dengan LINQ , melalui penggunaan ekspresi lambda , yang lebih tinggi fungsi ( Select, Where, dll), urutan pencocokan pola, dll


Terima kasih atas tautannya ke tracer ray. Ambil kebebasan menambahkan gambar ke jawaban Anda.
Kirk Kuykendall
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.