Управляющие символы
#\tab
#\newline
#\space
#\backspace
#\escape
Проверить является ли аргумент числом
(numberp "hello")
NIL
Print печатает аргумент и возвращает его, так что можно безопасно встраивать его в свои выражения.
(+ (print (* 2 3)) (print (/ 3 2)) 9)
6
3/2
33/2
setf вернёт значение переменной, после присваивания, так что можно использовать его в дальнейшем
(setf x 6)
(+ x (setf x 4) x)
12
Инкремент/декремент
(1+ 3)
(1- 3)
4
2
Параметры передаются по значению
(defun weird-function (n)
(setf n 4)
n)
; WEIRD-FUNCTION
(setf abc 17)
; 17
(weird-function abc)
; 4
abc
; 17
Экранировать передаваемый аргумент и вернуть его как данные
(quote (+ 1 2))
'(+ 1 2)
(+ 1 2)
(+ 1 2)
Разница между defvar и defparameter.
(defvar *one* :a)
(defparameter *two* :a)
(defvar *one* :b)
(defparameter *two* :b)
*one*
; :A
*two*
; :B
Комплексный пример работы со структурами
; простой вариант объявления структуры
(defstruct person name age sex)
(defvar *p* (make-person :name "Waserd" :age 21 :sex 'male))
; #S(PERSON :NAME "Waserd" :AGE 21 :SEX MALE)
(person-name *p*)
; "Waserd"
(setf (person-age *p*) 22)
(person-age *p*)
; 22
(defvar *p2* (copy-person *p*))
; *P2*
(setf (person-name *p2*) "Bubujka")
*p*
; #S(PERSON :NAME "Waserd" :AGE 22 :SEX MALE)
*p2*
; #S(PERSON :NAME "Bubujka" :AGE 22 :SEX MALE)
(person-p *p*) ; Является ли объект структурой типа person?
; T
(person-p "String")
; NIL
; более сложный вариант структуры
(defstruct (person (:constructor create-person))
(name nil :read-only t)
age
(sex 'unknown)) ; Вторым параметром у слота - значение по умолчанию
(create-person :name "Najomi" :age 23)
; #S(PERSON :NAME "Najomi" :AGE 23 :SEX UNKNOWN)
Проверить что 2 числа не равны друг другу
(/= 5 3)
; T
(/= 5 (+ 2 3))
; NIL
Работа с множественными значениями
(defun return-some-values ()
(values :hello :world))
(print (return-some-values))
; :HELLO
(multiple-value-bind (first second) (return-some-values)
(print first)
(print second))
; :HELLO
; :WORLD
Источники:
- 1-4, 6-7 - www.cs.gmu.edu
- 9 - www.chemie.fu-berlin.de
- 10 - www.lispworks.com
Ссылки по теме:
- www.lispmachine.net - сборник ссылок на интересные материалы по Common Lisp
- www.whoishostingthis.com - Ещё один сборник ссылок по Common Lisp
- lisper.ru
- lisp.ru
- cl-cookbook.sourceforge.net - сборник рецептов по Common Lisp
- www.gigamonkeys.com - Practical Common Lisp - великолепная книга с реальными примерами использования CL
- pcl.catap.ru - русский перевод PCL
- www.clisp.org - ещё один сборник ссылок на различные ресурсы
- www.paulgraham.com - и ещё ссылки на ресурсы
- www.paulgraham.com - хорошая книга по макросам в лиспе