🌀 Lisp (Common Lisp)
Скобочный язык: списки, функции, макросы, REPL.
Шпаргалки · Программирование · #lisp #common-lisp #functional
IDE и запуск
Emacs + SLIME / Sly, VS Code + Alive, Lem. Реализации: SBCL (самая популярная), CLISP, Allegro. Запуск: sbcl --script file.lisp, интерактив sbcl. Пакеты: Quicklisp ((ql:quickload :alexandria)).
Типы данных
42 3.14 1/3 #c(1 2) ; числа (есть рациональные и комплексные)
"строка" #\a t nil ; строка, символ, истина, ложь / пустой список
'(1 2 3) (list 1 2 3) ; список
#(1 2 3) ; вектор
(make-hash-table) ; хэш-таблица
:keyword 'symbol
Операторы
Префиксная запись: (+ 1 2), (- 5 3), (* 2 3), (/ 6 3), (= a b), (< a b), (and a b), (or a b), (not x), (if cond then else), (cond (c1 r1) (t r2)).
Циклы
(dotimes (i 3) (print i))
(dolist (x '(1 2 3)) (print x))
(loop for i from 1 to 5 collect (* i i))
(loop while (< x 10) do (incf x))
Функции
(defun add (a b) (+ a b))
(defun fact (n) (if (<= n 1) 1 (* n (fact (- n 1)))))
(lambda (x) (* x x))
(mapcar #'(lambda (x) (* x 2)) '(1 2 3))
(funcall #'add 1 2)
(defmacro unless2 (c &body b) `(if ,c nil (progn ,@b)))
Встроенные
car / first, cdr / rest, cons, list, append, length, reverse, nth, mapcar, reduce, remove-if, format, setf, let, gethash, string-upcase, princ.
Вывод
(format t "x = ~a~%" x) ; ~a значение, ~% перевод строки, ~d число
Асинхронность
Библиотеки: bordeaux-threads (потоки), lparallel (параллелизм), cl-async.
Библиотеки по задачам
Alexandria, Serapeum (утилиты), Hunchentoot, Clack (веб), Postmodern (БД), cl-ppcre (регулярки), FiveAM, Parachute (тесты), CLOS (ООП, встроено).