Ανώνυμη συνάρτηση

Στην επιστήμη των υπολογιστών μια ανώνυμη συνάρτηση (Αγγλικά: anonymous function ή function literal ή lambda abstraction) είναι ένας ορισμός μιας συνάρτησης ή οποία περιέχει το σώματα της συνάρτησης αλλά δεν περιέχει όνομα (δηλαδή αναγνωριστικό). Οι ανώνυμες συναρτήσεις συνήθως :

 περνιούνται ως παράμετροι σε συναρτήσεις ανώτερου βαθμού, ή
 ή δημιουργούν ως αποτέλεσμα συναρτήσεις ανώτερου βαθμού που χρειάζεται να επιστρέψει μια συνάρτηση.

Εάν η συνάρτηση χρησιμοποιείται μόνο μια φορά ή για περιορισμό αριθμό κλήσεων τότε μια ανώνυμη συνάρτηση είναι συντακτικά ελαφρύτερη από μια συνάρτηση με όνομα. Οι ανώνυμες συναρτήσεις συναντιούνται συνεχώς στις συναρτησιακές γλώσσες προγραμματισμού αλλά και σε άλλες γλώσσες προγραμματισμού όπου ο ρόλος της συνάρτησης έχει πρωταρχικής χρήσης όπως τα υπόλοιποι τύποι δεδομένων.

Οι ανώνυμες συναρτήσεις προέρχονται από την ανάπτυξη του λ-λογισμού που έκανε ο Αλόνζο Τσέρτς την δεκαετία του 1930 (πριν την ανάπτυξη των ηλεκτρονικών υπολογιστών). Για παράδειγμα στα μαθηματικά μια συνάρτηση της μορφής  μπορεί να γραφτεί ανώνυμα ως . Η συγκεκριμένη μαθηματική συνάρτηση στην python θα γραφόταν ανώνυμα ως (lambda x: x**2 -x + 42). Στο παρακάτω παράδειγμα βλέπουμε την κλήση της συνάρτησης f(x) (ορισμένη με το όνομα f) και την κλήση της ίδιας συνάρτησης ανώνυμα (με lambda έκφραση)  στο διερμηνέα της Python:

>>> def f (x): return x**2 -x + 42
...
>>> f(10)
132
>>> (lambda x: x**2 -x + 42) (10)
132

Στην γλώσσα Haskell η ανώνυμη συνάρτηση λάμδα ορίζεται με το σύμβολο \ που συμβολίζει το ελληνικό γράμμα λ και εννοεί τον ορισμό συνάρτησης λάμδα . Συγκεκριμένα η κλήση της ίδιας ανώνυμης συνάρτησης στον διερμηνέα (ghci) της γλώσσας Haskell θα γινόταν με τις παρακάτω εντολές:

Prelude> (\x -> x^2 -x + 42) (10)
132

Σε διάφορες γλώσσες προγραμματισμού οι ανώνυμες συναρτήσεις ονομάζονται συναρτήσεις λάμδα (Αγγλικά: lambda) ή περιγράφονται ως λάμδα αφαιρέσεις (Αγγλικά: lambda abstractions). Οι ανώνυμες συναρτήσεις είναι μέρος των γλωσσών προγραμματισμού από την γλώσσα προγραμματισμού Lisp το 1958 και σήμερα πολλές σύγχρονες γλώσσες προγραμματισμού υποστηρίζουν ανώνυμες συναρτήσεις (για παράδειγμα η C++11 και η Java 8 υποστηρίζουν ανώνυμες/λάμδα συναρτήσεις).

Οι ανώνυμες συναρτήσεις είναι μια μορφή ενθυλακωμένης συνάρτησης, η οποία επιτρέπει πρόσβαση σε μεταβλητές που βρίσκονται μέσα στο πεδίο της συνάρτησης που ενθυλακώνεται. Σε αντίθεση με τις συναρτήσεις με όνομα δεν μπορούν να χρησιμοποιηθούν σε αναδρομή χωρίς την βοήθεια του τελεστή fixpoint ο οποίος είναι γνωστός και ως anonymous fixpoint ή anonymous recursion.

Παραπομπές 

Λ-λογισμός
Δομές δεδομένων
Γλώσσες προγραμματισμού