StackOverflow menunjuk saya ke sini, jadi pertanyaannya mungkin sedikit dalam istilah awam.
Wikipedia mendefinisikan fungsi murni sebagai
Dalam pemrograman komputer, suatu fungsi dapat digambarkan sebagai fungsi murni jika kedua pernyataan ini tentang fungsi tersebut:
- Fungsi selalu mengevaluasi nilai hasil yang sama dengan nilai argumen yang sama. Nilai hasil fungsi tidak dapat bergantung pada informasi atau keadaan tersembunyi yang dapat berubah saat eksekusi program berlangsung atau antara berbagai eksekusi program, juga tidak dapat bergantung pada input eksternal dari perangkat I / O.
- Evaluasi hasil tidak menyebabkan efek samping atau keluaran yang dapat diamati secara semantik, seperti mutasi objek yang dapat berubah atau keluaran ke perangkat I / O.
Namun tampaknya tidak mengutip sumber apa pun - sehingga sulit untuk mengatakan apakah ini merupakan definisi yang diterima, atau siapa yang mendefinisikannya dengan cara ini.
Ketika saya melihat apa yang dilakukan bahasa ketika mereka menyertakan sintaks / anotasi untuk fungsi "murni", ada beberapa pendekatan yang berbeda:
- Di D , satu-satunya batasan adalah non-mutasi negara global. Fungsi "Murni" dapat mengubah argumennya.
- Dalam GCC ada dua jenis "murni":
pure
(tidak ada efek samping, tetapi dapat membaca keadaan global) danconst
(sangat murni sesuai definisi wikipedia). - Dalam C # , itu didefinisikan sebagai "tidak membuat perubahan status yang terlihat" (apa pun itu).
- Haskell mengikuti definisi Wikipedia.
Jadi pertanyaan saya adalah: adakah definisi kanonik fungsi murni?
Dan jika ada, apa sumbernya?