Dalam pemrograman fungsional karena hampir semua struktur data tidak dapat diubah, ketika negara harus mengubah struktur baru dibuat. Apakah ini berarti lebih banyak penggunaan memori?
Itu tergantung pada struktur data, perubahan tepat yang Anda lakukan dan, dalam beberapa kasus, pengoptimal. Sebagai salah satu contoh, mari kita pertimbangkan untuk menambahkan ke sebuah daftar:
list2 = prepend(42, list1) // list2 is now a list that contains 42 followed
// by the elements of list1. list1 is unchanged
Di sini persyaratan memori tambahan konstan - demikian pula biaya runtime panggilan prepend
. Mengapa? Karena prepend
hanya menciptakan sel baru yang memiliki 42
kepala dan list1
ekornya. Tidak perlu menyalin atau beralih ke sana list2
untuk mencapai ini. Artinya, kecuali untuk memori yang diperlukan untuk menyimpan 42
, list2
menggunakan kembali memori yang sama yang digunakan oleh list1
. Karena kedua daftar tidak dapat diubah, berbagi ini sangat aman.
Demikian pula, ketika bekerja dengan struktur pohon seimbang, sebagian besar operasi hanya memerlukan jumlah ruang tambahan logaritmik karena semuanya, tetapi satu jalur pohon dapat dibagi.
Untuk array situasinya agak berbeda. Itu sebabnya, dalam banyak bahasa FP, array tidak begitu umum digunakan. Namun, jika Anda melakukan sesuatu seperti arr2 = map(f, arr1)
dan arr1
tidak pernah digunakan lagi setelah baris ini, pengoptimal yang pintar benar-benar dapat membuat kode yang bermutasi arr1
alih-alih membuat array baru (tanpa mempengaruhi perilaku program). Dalam hal itu pertunjukan akan seperti dalam bahasa imperatif tentu saja.