Skiena đã không nói "đơn đặt hàng ", chỉ "ứng dụng". Điều này đôi khi được sử dụng như một ý nghĩa như "hoàn toàn chức năng", hoặc một ngôn ngữ đánh giá thông qua việc áp dụng các chức năng trái ngược với việc thực hiện các lệnh thao túng trạng thái. Mathematica (ít nhất là ngày nay) không hoàn toàn là chức năng, nhưng có vẻ như nó khuyến khích mạnh mẽ một phong cách lập trình hoàn toàn chức năng.
Trong một ngôn ngữ chức năng thuần túy, chẳng hạn như Haskell, bạn áp dụng các hàm cho các giá trị và tạo ra các giá trị mới giống như trong toán học. Giống như toán học, trong một ngôn ngữ như vậy, các biến chỉ là tên của các giá trị. Nếu bạn nói "hãyx là 1", sau đó x và 1ở khắp mọi nơi có thể hoán đổi cho nhau. Thật vô nghĩa khi nói về "đột biến"x được 2 hơn là nói để thiết lập 1 được 2. Đối với mảng, điều này có nghĩa là để "cập nhật" một mảng, bạn xây dựng một mảng mới với các thay đổi. Rõ ràng, xây dựng toàn bộ một bản sao của một mảng ngoại trừ một mục bạn đang thay đổi là tốn kém. Đây gần như chắc chắn là vấn đề Skiena đang đề cập.
Theo hiểu biết của tôi, không có câu trả lời thỏa đáng nào cho vấn đề này. Đó là, không có cấu trúc dữ liệu chức năng thuần túy cung cấp tra cứu và cập nhật thời gian liên tục cho tất cả các phiên bản . Bạn có thể tạo các cấu trúc dữ liệu thuần túy (bên ngoài) để cung cấp tra cứu và cập nhật thời gian liên tục mới nhấtcác phiên bản, nhưng việc truy cập vào các phiên bản cũ hơn của mảng trở nên chậm hơn. Bạn có thể sử dụng các loại đơn hoặc loại duy nhất để thực thi việc sử dụng các mảng cho phép trình biên dịch sử dụng các bản cập nhật tại chỗ, nhưng điều này tương đương với việc sử dụng một cách tiếp cận bắt buộc (mặc dù theo cách thức được kiểm soát và có chứa). Trong thực tế, các lập trình viên trong các ngôn ngữ chức năng thuần túy đơn giản là không sử dụng mảng nhiều như các lập trình viên bắt buộc và khi họ sử dụng mảng, họ có xu hướng sử dụng các hoạt động hàng loạt. Nếu bạn định chạm vào mọi phần tử của một mảng, thì chi phí sao chép mảng là không đổi trên mỗi phần tử.
Mặc dù chắc chắn có những hạn chế của lập trình chức năng thuần túy khiến việc triển khai hiệu quả trở nên không rõ ràng, hầu hết thời gian chỉ là vấn đề áp dụng các kỹ thuật thiết kế và triển khai khác nhau so với điển hình / thực tế trong các ngôn ngữ mệnh lệnh. Độ tinh khiết cũng đảm bảo rằng làm cho nhiều thiết kế, tối ưu hóa, và đôi khi toàn bộ công nghệ thực tế. Đối với lần đầu tiên, hầu hết các cấu trúc dữ liệu chức năng thuần túy được thiết kế để chia sẻ càng nhiều càng tốt. Đối với lần thứ hai, một kỹ thuật chính để cải thiện hiệu suất của các hoạt động hàng loạt là hợp nhất kết hợp nhiều hoạt động hàng loạt thành một để tránh các trung gian. Cuối cùng,