Lisp
Lisp (ang. LISt Processing) jest rodziną języków programowania, które zostały opracowane w 1958 roku przez Johna McCarthya i jego zespół w MIT. Język ten jest jednym z najstarszych języków wysokiego poziomu, który wciąż jest aktywnie używany w badaniach oraz w przemyśle.
Historia
Pierwsza implementacja Lispa – LISP 1 – powstała w 1958 roku jako język przeznaczony do badania sztucznej inteligencji. W kolejnych dekadach język ewoluował, powstawały takie wersje jak Maclisp, Scheme (w 1975 roku) oraz Common Lisp (standaryzowany w 1990 roku).
Charakterystyka
- Składnia oparta na listach – kod i dane są przedstawiane jako listy s‑wyrażeń (ang. sexpr), co umożliwia łatwe manipulowanie kodem jako danymi (metaprogramowanie).
- Dynamiczne typowanie – typy zmiennych są określane w czasie wykonywania.
- Garbage collection – automatyczne zarządzanie pamięcią, wprowadzone już w pierwszej wersji języka.
- Wieloparadygmatyczność – poza programowaniem funkcyjnym (np. programowanie funkcyjne) Lisp wspiera programowanie proceduralne oraz obiektowe (np. CLOS – Common Lisp Object System).
Warianty
Rodzina Lispa obejmuje wiele wariantów, z których najważniejsze to:
- Common Lisp
- Standaryzowany w 1990 roku, oferuje rozbudowany zestaw bibliotek i mechanizmów językowych.
- Scheme
- Zaprojektowany jako prostsza i bardziej elegancka wersja Lispa, wykorzystywany w edukacji oraz w projektach badawczych.
- Clojure
- Nowoczesny dialekt działający na platformie JVM, integrujący się z ekosystemem Javy i oferujący wsparcie dla programowania współbieżnego.
- Racket
- Rozszerzona wersja Scheme, skierowana do nauczania programowania i tworzenia języków domenowych.
Wpływ i zastosowania
Lisp miał ogromny wpływ na rozwój informatyki:
- Wprowadził pojęcie garbage collection, które stało się standardem w nowoczesnych językach.
- Rozwinął techniki metaprogramowania i makr, które są używane w językach takich jak Ruby czy Elixir.
- Jako język badawczy przyczynił się do postępu w sztucznej inteligencji, w tym w systemach ekspertowych i robotyce.
- Współczesne języki programowania, takie jak Haskell, Swift czy JavaScript, zawierają elementy inspirowane Lispm, np. funkcje wyższego rzędu i zamknięcia.
Przykładowy kod
(defun factorial (n)
(if (<= n 1)
1
(* n (factorial (- n 1)))))
Powyższy przykład definiuje rekurencyjnie funkcję obliczającą silnię w Common Lisp.
Bibliografia i dalsze lektury
Więcej informacji można znaleźć w następujących pozycjach:
- The Art of Computer Programming – Donald Knuth (rozdziały o algorytmach Lisp).
- Structure and Interpretation of Computer Programs – Harold Abelson i Gerald Jay Sussman (przykłady w Scheme).
- Common Lisp the Language – Guy L. Steele Jr.