🌀 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 (ООП, встроено).