ในการเขียนโปรแกรมการทำงานเนื่องจากโครงสร้างข้อมูลเกือบทั้งหมดไม่เปลี่ยนรูปเมื่อรัฐต้องเปลี่ยนโครงสร้างใหม่จะถูกสร้างขึ้น นี่หมายถึงการใช้หน่วยความจำมากขึ้นหรือไม่?
ขึ้นอยู่กับโครงสร้างข้อมูลการเปลี่ยนแปลงที่แน่นอนที่คุณดำเนินการและในบางกรณีเครื่องมือเพิ่มประสิทธิภาพ เป็นตัวอย่างหนึ่งลองพิจารณาเพิ่มไปยังรายการ:
list2 = prepend(42, list1) // list2 is now a list that contains 42 followed
// by the elements of list1. list1 is unchanged
นี่คือความต้องการหน่วยความจำเพิ่มเติมเป็นค่าคงที่ - prepend
เพื่อเป็นค่าใช้จ่ายของการเรียกรันไทม์ ทำไม? เพราะprepend
เพียงแค่สร้างเซลล์ใหม่ซึ่งมี42
ทั้งศีรษะและlist1
หาง ไม่จำเป็นต้องคัดลอกหรือวนซ้ำlist2
เพื่อให้บรรลุเป้าหมายนี้ นั่นคือยกเว้นสำหรับหน่วยความจำที่จำเป็นต้องใช้ในการจัดเก็บ42
, list2
reuses list1
หน่วยความจำเดียวกันที่ถูกใช้โดย เนื่องจากทั้งสองรายการไม่มีการเปลี่ยนแปลงการแบ่งปันนี้จึงปลอดภัยอย่างสมบูรณ์แบบ
ในทำนองเดียวกันเมื่อทำงานกับโครงสร้างต้นไม้ที่สมดุลการดำเนินงานส่วนใหญ่ต้องการพื้นที่เพิ่มเติมเพียงลอการิทึมเพราะทุกอย่าง แต่อาจมีการแบ่งปันเส้นทางของต้นไม้
สำหรับอาร์เรย์สถานการณ์จะแตกต่างกันเล็กน้อย นั่นเป็นเหตุผลว่าทำไมในหลาย ๆ ภาษาของ FP จึงไม่ได้ใช้อาร์เรย์ อย่างไรก็ตามหากคุณทำสิ่งที่ชอบarr2 = map(f, arr1)
และarr1
ไม่เคยใช้อีกหลังจากบรรทัดนี้เครื่องมือเพิ่มประสิทธิภาพสมาร์ทสามารถสร้างรหัสที่กลายพันธุ์arr1
แทนที่จะสร้างอาร์เรย์ใหม่ (โดยไม่ส่งผลต่อพฤติกรรมของโปรแกรม) ในกรณีนั้นการแสดงจะเป็นภาษาที่จำเป็นแน่นอน