StackOverflow chỉ cho tôi ở đây, vì vậy câu hỏi có thể là một chút trong các điều khoản của giáo dân.
Wikipedia định nghĩa các hàm thuần túy là
Trong lập trình máy tính, một hàm có thể được mô tả là một hàm thuần nếu cả hai câu lệnh này về hàm giữ:
- Hàm luôn đánh giá cùng một giá trị kết quả được đưa ra cùng (các) giá trị đối số. Giá trị kết quả chức năng không thể phụ thuộc vào bất kỳ thông tin hoặc trạng thái ẩn nào có thể thay đổi khi tiến hành thực hiện chương trình hoặc giữa các lần thực hiện khác nhau của chương trình, cũng không thể phụ thuộc vào bất kỳ đầu vào bên ngoài nào từ các thiết bị I / O.
- Đánh giá kết quả không gây ra bất kỳ tác dụng phụ hoặc đầu ra có thể quan sát được về mặt ngữ nghĩa, chẳng hạn như đột biến của các đối tượng có thể thay đổi hoặc đầu ra cho các thiết bị I / O.
Tuy nhiên, nó dường như không trích dẫn bất kỳ nguồn nào - vì vậy thật khó để nói liệu đây có phải là một định nghĩa được chấp nhận hay ai đã định nghĩa nó theo cách này.
Khi tôi nhìn vào những gì các ngôn ngữ làm khi chúng bao gồm một cú pháp / chú thích cho các hàm "thuần túy", có khá nhiều cách tiếp cận khác nhau:
- Trong D giới hạn duy nhất là không đột biến của nhà nước toàn cầu. Các hàm "Pure" có thể làm thay đổi các đối số của nó.
- Trong GCC có hai loại "thuần túy":
pure
(không có tác dụng phụ, nhưng có thể đọc trạng thái toàn cầu) vàconst
(hoàn toàn thuần túy theo định nghĩa của wikipedia). - Trong C # , nó được định nghĩa là "không thực hiện bất kỳ thay đổi trạng thái hiển thị nào" (bất kể đó là gì).
- Haskell tuân theo định nghĩa Wikipedia.
Vì vậy, câu hỏi của tôi là: có một định nghĩa chính tắc của chức năng thuần túy?
Và nếu có, nguồn của nó là gì?