Pertama, memahami masalahnya adalah hal yang paling penting. Duplikasi berturut-turut dalam daftar terjadi ketika titik data yang sama muncul di dua tempat atau lebih dalam larik, namun hanya jika duplikasi ini terjadi berturut-turut. Misalnya, dalam daftar [1, 2, 2, 3, 2], titik data '2' diduplikasi, namun tidak dianggap sebagai duplikasi berturut-turut karena tidak sejajar dengan '2' pertama. Namun, daftar [1, 2, 2, 3] berisi sepasang '2' yang berurutan.
Untuk masalah ini, Haskell menyajikan solusi yang sangat fleksibel dan teroptimasi dengan baik dengan fungsi perpustakaan bawaannya. Khususnya, fungsi 'grup' dari pustaka `Data.List` akan digunakan.
import Data.List (group) removeDuplicates :: Eq a => [a] -> [a] removeDuplicates = map head . group
Cuplikan kode yang singkat dan ringkas ini menghilangkan duplikat yang berurutan dengan membagi daftar asli menjadi sub-daftar elemen duplikat (grup), lalu mengganti setiap sub-daftar dengan elemen pertama (kepala peta).
Memahami fungsi hapusDuplikat
Untuk mendapatkan pemahaman yang lebih baik tentang cara kerja kode, mari kita uraikan.
Mengimpor perpustakaan yang diperlukan: Kode dimulai dengan `import Data.List (grup)`. Di sini, kami mengimpor fungsi 'grup' dari perpustakaan 'Data.List'. 'group' adalah fungsi yang sangat berguna di Haskell yang membagi daftar menjadi sub-daftar elemen yang identik dan berdekatan.
Mendefinisikan fungsi: Kami kemudian pindah ke `removeDuplikat :: Persamaan a => [a] -> [a]`. Ini adalah deklarasi tipe untuk fungsi kita. Ini hanya menyatakan bahwa fungsi kita mengambil daftar tipe data apa pun 'a' (di mana 'a' adalah anggota kelas 'Persamaan', atau dapat diperiksa kesetaraannya), dan akan mengembalikan daftar tipe data yang sama.
Penjelasan Detail Langkah-Langkahnya
Sekarang, fokus pada bagian `removeDuplications = map head . group`, definisi fungsi kamilah yang meratakan keindahan fitur pemrograman fungsional Haskell.
Komposisi fungsi: Ekspresi tersebut menggunakan '.' operator yang dalam Haskell berarti komposisi fungsi. Pada dasarnya kami membuat fungsi baru dengan menggabungkan 'grup' dan 'kepala peta'.
fungsi 'grup': Fungsi 'grup' mengambil daftar masukan kita dan memecahnya menjadi sub-daftar tempat semua elemen identik dan berdekatan dikelompokkan menjadi satu.
fungsi 'kepala peta': Kemudian 'map head' melanjutkan dan mengganti setiap sub-daftar dengan elemen pertama dari sub-daftar tersebut – secara efektif menghapus semua duplikat yang berurutan. Ini dilakukan dengan cara yang sangat efisien dan juga mudah dibaca.
Kode ini mengilustrasikan bagaimana kita dapat secara efektif menggunakan fungsi perpustakaan Haskell yang kaya dan fitur pemrograman fungsional untuk melakukan banyak hal dengan sedikit hal.
Perpustakaan dan Fungsi Haskell
Kehebatan Haskell terletak pada dukungan perpustakaan dan fungsi bawaannya. Pustaka Data.List Haskell adalah harta karun berupa fungsi-fungsi yang berguna untuk pemrosesan daftar, 'grup' adalah salah satunya. Fungsi lain, 'nub', juga dapat digunakan untuk menghapus semua duplikat terlepas dari posisinya.
Kumpulan perpustakaan yang kaya dan pendekatan pemrograman fungsional yang diketik dengan kuat menjadikan Haskell bahasa yang sangat fleksibel dan andal untuk mengatasi masalah dunia nyata. Selain itu, sintaksis yang mudah dipahami membuat proses debug dan pemahaman kode menjadi cukup mudah.