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

Ιστορία

Ο λ-λογισμός παρέχει το θεωρητικό υπόβαθρο για την περιγραφή συναρτήσεων και της αποτίμησής τους. Αν και είναι περισσότερο μαθηματική αφαίρεση παρά γλώσσα προγραμματισμού, αποτελεί τη βάση σχεδόν όλων των συναρτησιακών γλωσσών προγραμματισμού. Ένα ισοδύναμο μαθηματικό σύστημα, η συνδυαστική λογική, θεωρείται γενικά πιο αφηρημένο και παλαιότερο από το λογισμό λάμδα. Τόσο η συνδυαστική λογική και ο λογισμός λάμδα αναπτύχθηκαν αρχικά για να επιτευχθεί μια πιο καθαρή προσέγγιση στη θεμελίωση των μαθηματικών.
Μια από τις πρώτες συναρτησιακές γλώσσες ήταν η LISP, που αναπτύχθηκε από τον Τζον Μακάρθι στο MIT στη δεκαετία του 1950. Η LISP εισήγαγε πολλά στοιχεία που βρίσκονται σε πολλές συναρτησιακές γλώσσες, αν και τυπικά είναι πολυ-παραδειγματική γλώσσα. Η Scheme και η Dylan ήταν μεταγενέστερες προσπάθειες να απλοποιηθεί και να βελτιωθεί η LISP.
Η IPL αναφέρεται κάποιες φορές ως η πρώτη συναρτησιακή γλώσσα προγραμματισμού. Είναι μια συμβολική γλώσσα που επεξεργάζεται λίστες από σύμβολα. Περιλαμβάνει την έννοια της γεννήτριας, μιας συνάρτησης που δέχεται άλλες συναρτήσεις ως ορίσματα, κάτι που μπορεί να ερμηνευτεί ως συναρτήσεις υψηλότερης τάξης.
Ο Κένεθ Ίβερσον ανέπτυξε την γλώσσα APL στην αρχή της δεκαετίας του 1960, που περιγράφεται στο βιβλίο του A Programming Language (ISBN 978-0-471-43014-8). Η APL ήταν η βασική επιρροή για την FP του Τζον Μπάκους. Στο μέσο της δεκαετίας του 1990, ο Άρθουρ Γουίτνυ, που είχε εργαστεί προηγουμένως με τον Ίβερσον, δημιούργησε την γλώσσα K, η οποία χρησιμοποιείται εμπορικά στη χρηματοοικονομική βιομηχανία.
Ο Τζον Μπάκους παρουσίασε τη γλώσσα FP στη διάλεξη που έδωσε για το βραβείο Τούριγκ το 1977 με τίτλο "Can Programming Be Liberated From the von Neumann Style? A Functional Style and its Algebra of Programs". Ορίζει τα συναρτησιακά προγράμματα ως κατασκευασμένα με ιεραρχικό τρόπο, με «συνδυασμό μορφών» που επιτρέπει μια «άλγεβρα προγραμμάτων». Σε σύγχρονη γλώσσα, αυτό σημαίνει ότι τα συναρτησιακά προγράμματα ακολουθούν την αρχή της σύνθεσης. Η δημοσίευση του Μπάκους έκανε δημοφιλή την έρευνα στο συναρτησιακό προγραμματισμό, αν έδωσε έμφαση στον προγραμματισμό σε επίπεδο συναρτήσεων, αντί του ύφους του λογισμού λάμδα, το οποίο τελικά έμελλε να συνδεθεί με τον συναρτησιακό προγραμματισμό.
Στη δεκαετία του 1970, η γλώσσα ML δημιουργήθηκε από τον Ρόμπιν Μίλνερ στο Πανεπιστήμιο του Εδιμβούργου. Ο Ντέιβιντ Τέρνερ ανέπτυξε αρχικά τη γλώσσα SASL στο Πανεπιστήμιο του Αγ. Ανδρέα και αργότερα τη γλώσσα Miranda στο Πανεπιστήμιο του Κεντ. Η ML τελικά αναπτύχθηκε σε διάφορες διαλέκτους, η πιο διαδεδομένες από τις οποίες είναι η OCaml και η Standard ML. Επίσης τη δεκαετία του 1970, η ανάπτυξη της γλώσσας Scheme (μιας μερικώς συναρτησιακής διαλέκτου της LISP), όπως περιγράφεται στα lambda papers και στο βιβλίο Structure and Interpretation of Computer Programs, διεύρυνε την κατανόηση για τη δύναμη του συναρτησιακού προγραμματισμού στην ευρύτερη κοινότητα των γλωσσών προγραμματισμού.
Στη δεκαετία του 1980, ο Περ Μαρτίν-Λόφ ανέπτυξε την διαισθητική θεωρία τύπων (intuitionistic type theory), γνωστή και ως κατασκευαστική (constructive) θεωρία τύπων, η οποία συνέδεσε τα συναρτησιακά προγράμματα με κατασκευαστικές αποδείξεις οσοδήποτε πολύπλοκων μαθηματικών προτάσεων, που εκφράζονται με εξαρτημένους τύπους. Αυτό οδήγησε σε ισχυρές νέες προσεγγίσεις στην διαδραστική απόδειξη θεωρημάτων και έχει επηρεάσει την ανάπτυξη πολλών μεταγενέστερων συναρτησιακών γλωσσών προγραμματισμού.
Η γλώσσα Haskell δημοσιεύτηκε στο τέλος της δεκαετίας του 1980, σε μια προσπάθεια να συνδυαστούν πολλές ιδέες από την έρευνα στο συναρτησιακό προγραμματισμό.