Saat ini saya bermain dengan LISP (terutama Skema dan Clojure) dan saya bertanya-tanya bagaimana struktur data khas ditangani dalam bahasa pemrograman fungsional.
Sebagai contoh, katakanlah saya ingin menyelesaikan masalah menggunakan algoritma pathfinding grafik. Bagaimana seseorang biasanya menggambarkan grafik itu dalam bahasa pemrograman fungsional (terutama tertarik pada gaya fungsional murni yang dapat diterapkan pada LISP)? Apakah saya akan melupakan grafik sama sekali dan menyelesaikan masalah dengan cara lain?
Bahasa fungsional menangani struktur data dengan cara yang sama seperti bahasa non-fungsional: dengan memisahkan antarmuka dari implementasi, membuat tipe data abstrak.
Anda dapat membuat tipe data abstrak di Lisp. Misalnya, untuk grafik, Anda mungkin menginginkan beberapa fungsi:
Setelah Anda membuat antarmuka itu ke grafik, Anda dapat mengimplementasikan struktur data aktual dengan berbagai cara, mungkin mengoptimalkan faktor-faktor seperti efisiensi pemrogram, fleksibilitas, dan efisiensi komputasi.
Kuncinya adalah memastikan bahwa kode yang menggunakan grafik hanya menggunakan antarmuka grafik, dan tidak mengakses implementasi yang mendasarinya. Ini akan membuat kode klien lebih sederhana karena tidak dipisahkan dari implementasi yang sebenarnya.
sumber
Yah itu akan tergantung pada apakah grafik Anda diarahkan / tidak diarahkan, tertimbang / tidak berbobot tetapi satu cara untuk mewakili grafik, diarahkan berbobot (yang akan menjadi yang paling umum) adalah dengan peta peta (di Clojure)
akan mewakili peta dengan node: a: b dan: c. : a menunjuk ke: b dengan bobot 3 dan: c dengan bobot 4.: b menunjuk ke: a dengan bobot 1.: c tidak menunjuk ke apa pun.
sumber
Dalam Common Lisp, jika saya perlu mewakili sebuah pohon, saya akan menggunakan salah satu daftar (jika hanya untuk peretasan cepat) atau mendefinisikan kelas pohon (atau struct, tetapi kelas berinteraksi dengan baik dengan fungsi generik, jadi mengapa tidak) .
Jika saya memerlukan pohon literal dalam kode, saya mungkin juga akan mendefinisikan
make-tree
fungsi yang mengambil daftar representasi pohon yang saya inginkan dan mengubahnya menjadi pohon objek pohon.sumber
Dalam Haskell daftar adalah struktur data dasar dan jika Anda ingin struktur data yang lebih maju Anda sering menggunakan struktur rekursif seperti pohon adalah null atau node dan dua pohon
sumber