Συναρτησιακός προγραμματισμός

Λόγω αυτού, δεν έχουν διαφάνεια αναφορικότητας, δηλαδή η ίδια έκφραση της γλώσσας μπορεί να δώσει διαφορετικές τιμές ανάλογα με την κατάσταση του εκτελούμενου προγράμματος. Αυτό οδήγησε σε ισχυρές νέες προσεγγίσεις στην διαδραστική απόδειξη θεωρημάτων και έχει επηρρεάσει την ανάπτυξη πολλών μεταγενέστερων συναρτησιακών γλωσσών προγραμματισμού. Η γλώσσα Haskell δημοσιεύτηκε στο τέλος της δεκαετίας του 1980, σε μια προσπάθεια να συνδυαστούν πολλές ιδέες από την έρευνα στο συναρτησιακό προγραμματισμό. .

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

Η Scheme και η Dylan ήταν μεταγενέστερες προσπάθειες να απλοποιηθεί και να βελτιωθεί η LISP. Η IPL αναφέρεται κάποιες φορές ως η πρώτη συναρτησιακή γλώσσα προγραμματισμού. Πολλές συναρτησιακές γλώσσες προγραμματισμού μπορούν να θεωρηθούν ως επεκτάσεις του λογισμού λάμδα. Πρακτικά, η διαφορά μεταξύ μιας μαθηματικής συνάρτησης και της έννοιας της συνάρτησης που χρησιμοποιείται στον προστακτικό προγραμματισμό είναι ότι οι προστακτικές συναρτήσεις μπορούν να έχουν παρενέργειες, αλλάζοντας την τιμή των ήδη αποτιμημένων υπολογισμών.

Η ML τελικά αναπτύχθηκε σε διάφορες διαλέκτους, η πιο διαδεδομένες από τις οποίες είναι η OCaml και η Standard ML. Ανδρέα και αργότερα τη γλώσσα Miranda στο Πανεπιστήμιο του Κεντ.

Η LISP εισήγαγε πολλά στοιχεία που βρίσκονται σε πολλές συναρτησιακές γλώσσες, αν και τυπικά είναι πολυ-παραδειγματική γλώσσα. Ένα ισοδύναμο μαθηματικό σύστημα, η συνδυαστική λογική, θεωρείται γενικά πιο αφηρημένο και παλαιότερο από το λογισμό λάμδα.

Περιλαμβάνει την έννοια της γεννήτριας, μιας συνάρτησης που δέχεται άλλες συναρτήσεις ως ορίσματα, κάτι που μπορεί να ερμηνευτεί ως συναρτήσεις υψηλότερης τάξης. Ο Κένεθ Ίβερσον ανέπτυξε την γλώσσα APL στην αρχή της δεκαετίας του 1960, που περιγράφεται στο βιβλίο του A Programming Language (ISBN 9780471430148). Ο συναρτησιακός προγραμματισμός έχει τις ρίζες του στο λογισμό λάμδα, ένα τυπικό σύστημα που αναπτύχθηκε τη δεκαετία 1930 για τη διερεύνηση του ορισμού συναρτήσεων, της εφαρμογής συναρτήσεων και της αναδρομής.

Στο μέσο της δεκαετίας του 1990, ο Άρθουρ Γουίτνυ, που είχε εργαστεί προηγουμένως με τον Ίβερσον, δημιούργησε την γλώσσα K, η οποία χρησιμοποιείται εμπορικά στη χρηματοοικονομική βιομηχανία. Ο Τζον Μπάκους παρουσίασε τη γλώσσα FP στη διάλεξη που έδωσε για το βραβείο Τούριγκ το 1977Can Programming Be Liberated From the von Neumann Style? A Functional Style and its Algebra of Programs. Στην επιστήμη υπολογιστών, συναρτησιακός προγραμματισμός είναι ένα προγραμματιστικό παράδειγμα που αντιμετωπίζει τον υπολογισμό ως την αποτίμηση μαθηματικών συναρτήσεων και αποφεύγει την κατάσταση προγράμματος και τα μεταβλητά δεδομένα.

Παρ όλα αυτά, αξιοσημείωτες συναρτησιακές γλώσσες που χρησιμοποιούνται στη βιομηχανία και στην ανάπτυξη εμπορικών εφαρμογών είναι ανάμεσα σε άλλες η Erlang, η OCaml, η Haskell, η Scheme, αλλά και γλώσσες ειδικών πεδίων όπως η R για τη στατιστική, η Mathematica για τα συμβολικά μαθηματικά, ή η K για την χρηματιστηριακή ανάλυση. Ορίζει τα συναρτησιακά προγράμματα ως κατασκευασμένα με ιεραρχικό τρόπο, με «συνδυασμό μορφών» που επιτρέπει μια «άλγεβρα προγραμμάτων».

Αν και είναι περισσότερο μαθηματική αφαίρεση παρά γλώσσα προγραμματισμού, αποτελεί τη βάση σχεδόν όλων των συναρτησιακών γλωσσών προγραμματισμού. Η δημοσίευση του Μπάκους έκανε δημοφιλή την έρευνα στο συναρτησιακό προγραμματισμό, αν έδωσε έμφαση στον προγραμματισμό σε επίπεδο συναρτήσεων, αντί του ύφους του λογισμού λάμδα, το οποίο τελικά έμελλε να συνδεθεί με τον συναρτησιακό προγραμματισμό. Στη δεκαετία του 1970, η γλώσσα ML δημιουργήθηκε από τον Ρόμπιν Μίλνερ στο Πανεπιστήμιο του Εδιμβούργου.

Η εξάλειψη των παρενεργειών μπορεί να κάνει πολύ ευκολότερο το να κατανοηθεί και να προβλεφθεί η συμπεριφορά ενός προγράμματος. Η APL ήταν η βασική επιρροή για την FP του Τζον Μπάκους.

Τόσο η συνδυαστική λογική και ο λογισμός λάμδα αναπτύχθηκαν αρχικά για να επιτευχθεί μια πιο καθαρή προσέγγιση στη θεμελίωση των μαθηματικών. Μια από τις πρώτες συναρτησιακές γλώσσες ήταν η LISP, που αναπτύχθηκε από τον Τζον Μακάρθι στο MIT στη δεκαετία του 1950. Τα λογιστικά φύλλα μπορούν επίσης να θεωρηθούν συναρτησιακές γλώσσες προγραμματισμού. Προγραμματισμός σε συναρτησιακό στυλ μπορεί να επιτευχθεί και σε μη συναρτησιακές γλώσσες όπως η C, η Java, η Python, που δεν είναι ειδικά σχεδιασμένες για τέτοια χρήση. Ο λογισμός λάμδα παρέχει το θεωρητικό υπόβαθρο για την περιγραφή συναρτήσεων και της αποτίμησής τους.

Αντίστροφα, σε συναρτησιακά προγράμματα, η τιμή που επιστρέφει μια συνάρτηση εξαρτάται μόνο από τα ορίσματα που αποτελούν την είσοδο της συνάρτησης. Διαδεδομένες γλώσσες ειδικού πεδίου όπως η SQL και τα Lex/Yacc χρησιμοποιούν στοιχεία συναρτησιακού προγραμματισμού, ειδικά για να αποφύγουν μεταβλητές τιμές.

Είναι μια συμβολική γλώσσα που επεξεργάζεται λίστες από σύμβολα. Σε σύγχρονη γλώσσα, αυτό σημαίνει ότι τα συναρτησιακά προγράμματα ακολουθούν την αρχή της σύνθεσης.

Ο Ντέιβιντ Τέρνερ ανέπτυξε αρχικά τη γλώσσα SASL στο Πανεπιστήμιο του Αγ. Επίσης τη δεκαετία του 1970, η ανάπτυξη της γλώσσας Scheme (μια μερικώς-συναρτησιακή διάλεκτος της LISP), όπως περιγράφεται στα lambda papers και στο βιβλίο Structure and Interpretation of Computer Programs, διεύρυνε την κατανόηση για τη δύναμη του συναρτησιακού προγραμματισμού στην ευρύτερη κοινότητα των γλωσσών προγραμματισμού. Στη δεκαετία του 1980, ο Περ Μαρτίν-Λόφ ανέπτυξε την διαισθητική θεωρία τύπων (intuitionistic type theory), γνωστή και ως κατασκευαστική (constructive) θεωρία τύπων, η οποία συνέδεσε τα συναρτησιακά προγράμματα με κατασκευαστικές αποδείξεις οσοδήποτε πολύπλοκων μαθηματικών προτάσεων, που εκφράζονται με εξαρτημένους τύπους.

Έτσι, η κλήση μιας συνάρτησης f με ένα όρισμα x θα δώσει το ίδιο αποτέλεσμα f(x) και τις δύο φορές.
 
?>