Lisp2D

Запуск интерпретатора

> ./lisp2d

  Запуск без параметров входит в интерактивный режим с помощью функции read-eval-print.

> ./lisp2d filename [{ argi }]

  Пошагово выполняет все формы, хранящиеся в файле filename. Поддерживается кодировка UTF-8. Перед выполнением файла переменная arg связывается со списком строк ("filename" "arg1" … "argn").
  Во всех случаях полученный результат вычисления возвращается как код возврата программы, если результатом было значение типа char или integer, иначе код возврата - 0.
  Интерпретатор использует системную многопоточность, нити стандарта POSIX.
  Количество работающих потоков будет равно количеству процессоров. Количество записей истории вычислений равно 12. (У каждого параллельного потока.)
  История вычислений при программировании даёт большое преимущество. Видны все узлы хода программы и виден участок, в котором произошло непредвиденное действие. Скорость отладки программы увеличивается на порядок.
  (nil setdebug),(nil setdebug false),(nil setdebug 0) - отменяет запись в историю вычислений. Скорость программы увеличивается.
  (nil setdebug number) - изменяет размер истории вычислений.
  (nil getdebug) - возвращает размер истории вычислений.

Синтаксис

(obj … obj) - список
#(obj … obj) – вектор (массив)
#[byte … byte] – вектор (массив) байтов

"ab…z" - строка
Строка имеющая специальные знаки создаётся с помощью знака \
"the \"abc\" is string" - это одна строка
"\\" - строка из одного знака \

;abc…z – комментарий до конца строки
'obj - запрещение вычислений, цитирование.
`obj - обратная квота (частичное запрещение вычислений).
,obj - вычисление внутри `.
,@obj - вычисление со вставкой внутри `.
(obj . obj) - точечная пара

#\c - буква (знак) c
#\space - пробел
#\tab - табуляция
#\vtab - вертикальная табуляция
#\newline - перевод строки
#\backspace - забой
#\return - возврат каретки
#\feed - прогон страницы
#\bell - звуковой сигнал
#\escape

Ключевые слова и переменные окружения

  Ключевое слово может ставиться в списке аргументов перед именем переменной.

&rest - связывает переменную со списком оставшихся аргументов
(nil defmethod m (a &rest b) (cout writeln a b))
(nil m 1 2 3 4) →
1
(2 3 4)
&whole - связывает переменную с оригинальным вызовом, где не вычислены ни объект ни аргументы.
>(nil defmethod t (&whole w) (cout writeln "w=" w))
(lambda (&whole w) (cout writeln "w=" w))
>((10 + 10) t)
w=((10 + 10) t)
&const - защита от изменения значения переменной. В области её видимости изменение связи на другой атом приводит к исключению. Защита внутреннего собержимого атома (чисел, строк, и т.д.) производится с помощью функции (nil const obj).

(nil  defmethod t (&const c)  ('c set 0) …)
(nil t 1) → исключение

nil – ничего или пустой список

true- логическая правда

false - логическая ложь

Глобальные переменные:

package - переменная, связывается с загружаемым файлом

arg - переменная, связывается со списком строк, передаваемых при старте интерпретатора.

pi=3.141592653589…  π

e=2.718281828459…

cin - стандартный поток ввода

cout - стандартный поток вывода

cerr - стандартный поток для сообщений об ошибках.

  xk-enter, xk-home, xk-end, xk-left, xk-right, xk-up, xk-down, xk-page-up, xk-page-down, xk-insert, xk-delete, xk-caps-lock, xk-shift-l, xk-shift-r, xk-control-l, xk-control-r, xk-alt-l, xk-alt-r, xk-f1, xk-f2, xk-f3, xk-f4, xk-f5, xk-f6, xk-f7, xk-f8, xk-f9, xk-f10, xk-f11, xk-f12, xk-backspace, xk-undo, xk-num-lock, xk-kp-multiply, xk-space, xk-numbersign, xk-question - коды нажатых клавиш в оконном приложении

lambda или λ - как первый символ в списке показывает, что весь список это определение анонимной функции. Практически это может быть просто список слов. Запускать функцию или нет, решит алгоритм программы.

  В объектах:
this - значение себя (объекта)

socket-max-connections - число, может иметь значение 128

Типы

(nil type-of obj) - возвращает символ, обозначающий тип результата вычисления obj, для объектов возвращает имя класса
nil - ничего (пустой список)
boolean - логический.
cons - списочная ячейка
btree - сбалансированное бинарное дерево
btree-node - узел сбалансированного бинарного дерева
vector - вектор (массив)
byte-vector - вектор (массив) байтов
string - строка букв
number - число (только один тип чисел)
symbol - символ
char - буква
stream - поток ввода/вывода
stat - структура состояний файла
socket - связь между компьютерами или процессами.
window - окно
time - дата и время.
dir - обработчик каталогов.
bif - встроенная в ядро функция.
lock - замок.
signal - сигнал.
environment - окружение.
quote - '
backquote - `
unquote - ,
unquote-splicing - ,@
При определении типов лучше пользоваться логическими функциями:

(nil atom obj) - obj не является списочной связкой
(nil atom nil) → true
(nil atom false) → true
(nil atom cons) → false
(nil atom obj) → obj

(nil = {obj}) - все obj равны nil
(nil = false) → false
(nil = nil) → true
(nil = true) → false

(nil <> {obj}) - ни один obj не равен nil
(nil <> false) → true
(nil <> nil) → false
(nil <> true) → true

(false = {obj}) - равенство false
(false = false) → true
(false = nil) → false
(false = true) → false

(false <> {obj}) - ни один obj не равен false
(false <> false) → false
(false <> nil) → true
(false <> true) → true

(true = {obj}) - равенство true
(true = false) → false
(true = nil) → false
(true = true) → true
(true = 12) → false

(true <> {obj}) - ни один obj не равен true
(true <> false) → true
(true <> nil) → true
(true <> true) → false

(nil booleanp obj) - возвращается true если obj это true или false.
(nil booleanp false) → true
(nil booleanp 1) → false
(nil stringp obj) - obj строка
(nil stringp "ab") → "ab"
(nil stringp 1) → false

(nil charp x) - буква
(nil charp #\t) → #\t
(nil charp true) → false

(nil listp obj) - соответствия списочной ячейке или nil
(nil listp nil) → true
(nil listp 1) → false
(nil listp '(1 . 2)) → (1 . 2)

(nil consp obj) - соответствия списочной ячейки
(nil consp 1) → false
(nil consp '(1)) → (1)

(nil btreep obj) - соответствия сбалансированную бинарному дереву. Возвращает дерево или false.

(nil btree-nodep obj) - соответствия узлу сбалансированного бинарного дерева. Возвращает узел или false.

(nil vectorp obj) - соответствия вектору
(nil vectorp #(1 2)) → #(1 2)
(nil vectorp 1) → false

(nil byte-vectorp obj) - соответствия байт-вектору
(nil byte-vectorp #[1 2]) → #[1 2]
(nil byte-vectorp 1) → false

(nil symbolp obj) - соответствия символу

(nil numberp obj) – число

(nil streamp obj) - поток
(nil streamp notstream)→false
(nil streamp stream)→stream

(nil statp [x]) - если x является структурой stat, возвращается x, иначе false.

(nil socketp obj) – связь между компьютерами или процессами.

(nil objectp obj) – объект класса

(nil windowp x) - соответствия окну
(nil windowp win) → win
(nil windowp 1) → false

(nil timep obj)

(nil dirp obj)

(nil bifp obj)

(nil lockp obj)

(nil signalp obj)

(nil envp obj)

(nil quotep obj)
(quote setf quote)
(quote swap quote)

(nil backquotep obj)
(backquote setf backquote)
(backquote swap backquote)

(nil unquotep obj)
(unquote setf unquote)
(unquote swap unquote)

(nil unquote-splicingp obj)
(unquote-splicing setf unquote-splicing)
(unquote-splicing swap unquote-splicing)

Символы

  Символы это вспомогательный объект для программирования, в "Чистом Лиспе" символов нет. Они могут иметь значения: обычные и функциональные, у них имеется вспомогательные свойства.

(symb <> [s1 … sn]) – ни один символ si не равен symb
(nil not (symb <> [s1 … sn])) - по крайней мере один из символов si равен главному объекту symb

(symb = [symb…symb]), (symb < [symb…symb]), (symb <= [symb…symb]), (symb > [symb…symb]), (symb >= [symb…symb]) - сравнения (по алфавиту).

(symb min symb … symb), (symb max symb … symb) - минимальный/максимальный (по алфавиту).

(symb + {symb|string|char}) - новый символ
(('abc + '- 'def) set 1)=('abc-def set 1)
(symb - symb … symb) – новый символ
(('abcdef - 'cd) set 1)=('abef set 1)

(string|char symbol) - возвращает символ с именем string|char.

(symbol put prop val) – устанавливает свойство prop символа symbol со значением val , возвращает val
Свойство символа находится только в текущем пространстве имён.
('work1 namespace
  (symbol put prop propv))
('work2 namespace
  (symbol get prop)) → NIL
(symb get prop) - свойство символа symb с именем prop. При отсутствии данного свойства возвращается NIL
При вхождении нескольких пространств имён возвращается первое попавшее свойство.
('std namespace
  (symb put prop propv)
  …
  ('another namespace
    (symb get prop) → propv
    …))
(symb remprop prop) - удаляет свойство символа symb с именем prop. Если удаляемого свойства нет - возвращается false иначе true. Удаляется свойство только в текущем пространстве имён.

(symb properties) - возвращает все свойства символа как #((symb . value)…) , пары в векторе отсортированы по symb

(symbol boundp [env]) – есть ли у символа значение. Возвращает true или false.

(nil|symbol gensym) - Функция-генератор разных символов, начинающихся на symbol, если начальный символ не указан начинается на t. Гарантируется, что возвращаемый символ является новым.

Константы

  Переменной можно установить свойство быть константой. Предназначено для ясности алгоритма, какие переменные не нужно менять. При попытке менять значение переменной будет возникать исключение. Быть константой это временное состояние, можно отменить константность, проверять свойство переменной.

(symbol const) - ставит переменной флаг константы. Возвращает символ при успехе, исключение при отсутствии значения переменной.

('x set (nil  localtime))
('x const)
('x set 0) → Исключение
('y const) → Исключение

(symbol unconst) - отменяет у переменной флаг константы. Возвращает символ при успехе, исключение при отсутствии значения переменной.

('pi unconst)
('pi  set "Me")
('x unconst) → Исключение

(symbol constp) - проверяет у переменной флаг константы. Возвращает true, false или исключение при отсутствии значения переменной.

('x set 0)
('x constp) →  false
('pi  constp) →  true
('y constp) → Исключение

  Самому атому можно ставить флаг константы (а не ссылке на него). Применяется при использовании изменения атомарного объекта. (функциями: += , setf , swap , move , setfirst , setrest , resize , setelt , и т.д.)
  При попытке изменить константный атом возникнет исключение.

(nil const obj) - ставит атому флаг константы.

(nil unconst obj) - отменяет свойство константы. Приводит к ошибке при использовании на аргумент: nil, false, true или любой символ.

(nil constp obj) - возвращает true если obj это константа или иначе false.

Установка значений

(nil let (([&const] var1 [{body1}])|var1([&const] varn [{bodyn}])|varn) [{main-body}]) - создаёт параллельно локальные связи переменных vari со значениями (nil progn [{bodyi}]) и пошагово вычисляет формы main-body. Переменные без значения [{bodyi}] инициализируются значением nil. Если перед именем переменной стоит символ &const дальнейшее изменение значения приведёт к исключению.

(symbol set val [env]) - изменяет значение переменной. Если такой переменной ещё нет, она создаётся в текущем окружении. Возвращается значение val.
(('(x y) first) set 1)≈(nil setq x 1)
(var letset val) - присваивание значений переменной var в текущем окружении (не трогает значение переменной выше). Имя переменной var вычисляется. Результатом будет val
Применяется при запоздании определения переменных формы let:
('x set 1)
(nil let ()
  …
  ('x letset -2)
  …)
x → 1
(nil|environment setq [{symb val}]) - изменяет значение переменных. Если какой-то переменной ещё нет, она создаётся в текущем окружении. Символы symb не вычисляются. Аргументы val вычисляются параллельно. Возвращается nil.
(nil setq x (10 - 1) y (2 / 3))
x → 9
y → 2/3

(nil environment) - текущее окружение.

(nil environment-external) - внешнее окружение.

Формы управления

(nil progn b1 … bn) - пошаговое вычисление b1 … bn , возвращает результат вычисления bn после вычисления всех форм b1…bn.

(nil parallel task … task) - параллельное вычисление задач task. После завершения всех задач возвращается nil.

(nil fork {body}) - создаёт новую задачу (nil progn {body}), не ожидает результата и возвращает nil. Главная задача не сможет словить исключения подзадачи.

(nil if test then else [uncert]) - вычисляет test, если результатом будет утвердительный объект (не false и не nil), то дальнейшее действие будет вычисление тела then. Если результатом вычисления test будет false, то будет выполнятся else. Оставшийся вариант результата это nil, при присутствии задачи uncert будет выполнятся оно, иначе else.
(nil if) →nil
(nil if test)=(nil progn test nil)
(nil if true 1 2 3) → 1
(nil if false 1 2 3) → 2
(nil if nil 1 2 3) → 3
(nil if nil 1 2) → 2
(nil when test {work})=(nil if test (nil progn {work})) - если будет положительным результат вычисления test, вычисляет пошагово задачи work.
(nil cond (test1 [{form1}])|atom … (testn [{formn}])|atom) - пошагово вычисляются testi пока не найдется не false и не nil значение. Возвращает результат последнего вычисления соответствующей формы formi. Если formi не указана, возвращается результат вычисления testi. Предоставленые аргументы: атомы - игнорируются.
(nil cond (false 1) ignore) →nil
(nil cond (false 1) (nil (cout write …))) → nil
(nil cond (false 1) (ok oking))
→ вычисление oking
(nil cond (false 1) (ok)) → ok
(nil cond (false 1) (notok oking) (true default))
→ вычисление default

'obj - блокируется вычисление obj.

(nil|environment eval obj) - двойное вычисление. Сначала obj вычисляется как аргумент функции eval, затем возвращается результат вычисления интерпретатором полученного значения в окружении environment.

(nil|environment apply obj fn arglist) - применение функции fn к аргументам arglist. Значением переменной fn может быть имя или лямбда список. Аргументы и объект вычисляются только один раз.

(nil|environment funcall obj fn [{arg}]) - применение функции fn к аргументам arg. Значением переменной fn может быть имя или лямбда список. Аргументы и объект вычисляются только один раз.

`obj - частичное запрещение вычислений аргумента obj. Когда внутри формы obj встречается запись ,x - то подформа x вычисляется и подставляется в форму obj. Также есть запись ,@x - она означает что значение x как список подставляется по-элементно в форму obj.
('l set '(1 2 . 3))
`(0 ,l ,@l)→(0 (1 2 . 3) 1 2)
,obj - вставка внутри формы `.
,@obj - вставка с развёрткой внутри формы `.
`(a ,@'(1 + 1) b c)→(a 1 + 1 b c)

(string load [arg1 … argn]) - считывает файл с именем string, вычисляет и возвращает соответствующий результат. Перед вычислением переменная arg связывается со списком аргументов (arg1 … argn). После вычисления восстанавливается предыдущее значение arg.

(string save obj) – записывает объект obj в формате печати в файл с именем string.

(nil do-while {body} test) - циклическое вычисление форм body, если последним результатом будет nil или false,то вычисления прекращаются и результатом будет это значение.
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (nil do-while … (nil throw 'break) … ) break last-task)
(nil while test {body}) – пошаговый условный цикл. Проверяется test, если test=false или nil то результатом будет это значение. Потом пошагово выполняются формы body, затем шаг на проверку test.
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (nil while … (nil throw 'break) … ) break last-task)
(nil try task-body {exception-name exception-body}) - запускается задача task-body. Если в процессе вычисления было исключение запускается задача exception-body. Имена исключений exception-name не вычисляются. Проверка имени производится с помощью идентичности eq. Если не поставлено имя текущего исключения, никаких дополнительных задач не будет и исключение остаётся. Последним именем можно поставить nil, тогда любое исключение будет обрабатыватся.
(nil try (nil setq result (nil eval task)) nil (nil setq error true)) - если при интерпретировании задачи task произошла ошибка, ставится флажок error.
(nil throw exception) - вычисляются аргумент, устанавливается исключение.
(nil throw `(,x " is not accepted"))
(nil exception) - возвращается текущее исключение.
(nil try (nil eval task) nil (cerr writeln "exception: " (nil exception)))
(nil exception-history) - возвращается история сообщений в момент, когда произошло исключение. Вне блока try возвращается nil. Размер истории сообщений для каждого параллельного потока ограничено. (см. getdebug и setdebug)

(nil  try (nil  eval  task)
nil (cerr writeln "exception-history: " ((nil exception-history) for* history-i (cerr print history-i))))
(nil log [{obj}]) - аргументы obj вычисляются. Добавляется к истории вычислений элемент, как список результатов аргументов obj. Возвращается nil.
  Для получения текущего списка сообщений можно использовать метод log-list.
(nil log-list) - возвращается список сохранённых сообщений (созданных с помощью log). Не предназначена для обработки исключений. (см. exception-history) Размер истории сообщений для каждого параллельного потока ограничено. (см. getdebug и setdebug)

  При возникновении исключений сообщения параллельных потоков не видны. Ни старые сообщения ни новые (после исключения в данном потоке). Видны только родительские. При ручном вызове log-list так-же не будет изыматься из множества других потоков логистическая информация. У каждого последовательного потока есть лимит сообщений. Видны будут только последние.
  Данная сборка информации предназначена только для временного поиска ошибки программы. Глобальная сборка всех сообщений со всех потоков приведёт к замедлении их работы и огромному количеству информации.

Logistic

Логика

  Трёх-значная логика определяется с помощью объектов nil, false, true. Символ true - определяет истину, false - ложь , nil - неопределённость. Любой другой объект представляется как истина.

(nil not obj)=(nil ¬ obj) - отрицание. ¬ = ((172 char) symbol)
xnot x
falsetrue
nilnil
truefalse
(nil not nil) → nil
(nil not false) → true
(nil not true) → false
(nil not 1) → false

(nil or a b … z)=(nil ∨ a b … z) - выбирается максимальное значение в порядке: false → nil → true. ∨ = ((8744 char) symbol)
x or yfalseniltrue
falsefalseniltrue
nilnilniltrue
truetruetruetrue
(nil or) → false
(nil or nil) → nil
(nil or true) → true
(nil or false) → false
(nil or 1) → 1
(nil or false nil) → nil
(nil or false nil 123) → 123
(nil nor a b … z)=(nil ⊽ a b … z)=(nil not (nil or a b … z))=(nil and {(nil not )}) - если в аргументах попадётся утверждение возвращается false. Если все аргументы false возвращается true. В оставшемся варианте с аргументами nil возвращается nil. ⊽ = ((8893 char) symbol)
x nor yfalseniltrue
falsetruenilfalse
nilnilnilfalse
truefalsefalsefalse
(nil and [a [b … [z]]])=(nil ∧ [a [b … [z]]]) - выбирается минимальное значение в порядке: true → nil → false. ∧ = ((8743 char) symbol)
x and yfalseniltrue
falsefalsefalsefalse
nilfalsenilnil
truefalseniltrue
(nil and) → true
(nil and nil) → nil
(nil and false) → false
(nil and 123) → true
(nil and 123 nil) → nil
(nil and 123 nil false) → false
(nil nand [a [b … [z]]])=(nil ⊼ [a [b … [z]]])=(nil not (nil and [a [b … [z]]]))=(nil or {(nil not )}) - если в аргументах попадётся false возвращается true. Если все аргументы утвердительные возвращается false. В оставшемся варианте с аргументами nil возвращается nil. ⊼ = ((8892 char) symbol)
x nand yfalseniltrue
falsetruetruetrue
niltruenilnil
truetruenilfalse
(nil xor a b … z)=(nil ⊻ a b … z) - возвращает единственное утвердительное значение. Если попалось больше чем одно возвращается false. При наличии аргументов nil - результат nil. ⊻ = ((8891 char) symbol)
x xor yfalseniltrue
falsefalseniltrue
nilnilnilnil
truetruenilfalse
(nil xor) → false
(nil xor nil) → nil
(nil xor false) → false
(nil xor 123) → 123
(nil xor false false) → false
(nil xor false nil) → nil
(nil xor false 123) → 123
(nil xor nil nil) → nil
(nil xor 123 234) → false
(nil xor nil 123) → nil
(nil xor false 1 false false) → 1
(nil xor false 1 false nil) → nil
(nil xor false 1 false 2) → false
(nil imply x y)=(nil -> x y) - импликация.
x → yfalseniltrue
falsetruetruetrue
nilnilniltrue
truefalseniltrue
(nil eq a b) - физическое равенство двух объектов (равенство указателей)
(nil eq) → true
(nil eq a) → (nil = a)
(nil eq nil nil) → true
(nil eq false false) → true
(nil eq 1 1) → false
(nil eq 'sym 'sym) → sym

Числа

12 - целое.
12.3 - с дробной частью.
2/3 - дробь.
1/2/3 - одно целое плюс две трети.
1/2/3e20=(1+2/(3*1020))=(1+1/(15*1019)) - с экспонентой.
1+2/3i, 1/3i, -7i+1e100 - комплексные.

(a + b c … z) - сложение a+b+c++z.
(a +) → a
(a + 1 2) → a+3
(2/3 + 1)1/2/3
(1+2i + 1+1i)2+3i
(a - b c … z) - вычитание a-b-c--z.
(a -)-a
(a - 1 2) → a-3
(2/3 - 1)-1/3
(1+2i - 1+1i)1i
(a * b … z) – умножение.
(a *) → a
(a * 2 3) → a*6
(1+2i * 2i)-4+2i
(a / b … z) - деление на все остальные числа.
(a /)1/a
(a / 2 3) → a/6
(1 / 2/3)1.5
(1 / 1+2i)0.2-0.4i
(a = b … z) – равенство a=b=…=z.
(2 = 2)2
(2 = 3)false
(n <> x1 … xk) - ни одно число xi не равно n.
(nil not (n <> x y z)) - число равно одному из аргументов.

(a < b … z) - числа возрастают a<b<…<z. Возвращается объект (число) или false или nil.

(a > b … z) - числа убывают a>b>…>z. Возвращается объект (число) или false или nil.

(a <= b … z) - меньше или равно (не убывают) a≤b≤…≤z. Возвращается объект (число) или false или nil.

(a >= b … z) - больше или равно (не возрастают) a≥b≥…≥z. Возвращается объект (число) или false или nil.

(x nanp) – предикат на 0/0.

(x infp) – предикат на ±∞.

(x finitep) – предикат на конечное число, не ±∞ и не 0/0.

(number integerp) - целое число.
(1.5 integerp) → false
(2 integerp) → 2
(1/0 integerp) → nil
(number realp) - не комплексное число.
(1.5 realp) → 1.5
(2i realp) → false
(number evenp) - предикат, на чётность.
(3 evenp) → false
(-4 evenp) → -4
(3.5 evenp) → nil

(number oddp) - предикат, на нечётность.
(4 oddp) → false
(-5 oddp) → -5
(3.5 oddp) → nil

(numb min numb … numb), (numb max numb … numb) – минимальное/максимальное число.

(a abs) – абсолютное значение.
(2 abs) → 2
(-3 abs) → 3

(3+4i abs)5
(x ceil [d]) - наименьшее целое, не меньшее x (ceilingeng=потолок).
(-2.5 ceil)=-2
(2.5 ceil)=3
(7 ceil 2)=((7 / 2) ceil)=4
(2 ceil)=2
(x floor [y]) - округление x в меньшую сторону до целого числа. Если дано y то возвращается целая часть от деления x на y (flooreng=пол).
(-2.5 floor) =-3
(13 floor 4) =3
(-13 floor 4) =-4
(x % [y])=(x mod [y]) - остаток от деления x на y.
(13 % 4) =1
(-13 % 4) =3
(13 % -4) =-3
(-13 % -4) =-1
(13.4 % 1) =0.4
(-13.4 % 1) =0.6
(2.3 %)=(2.3 % 1)=0.3
(x gcd [{xi}]) - наибольший общий делитель целых чисел, возвращает положительное целое число.
(3 gcd)=3
(-10 gcd) =10
(12 gcd -8) =4
(32 gcd 16 3) =1
(x lcm [{xi}]) - наименьшее общее кратное целых чисел, возвращает положительное целое число.
(3 lcm)=3
(-10 lcm) =10
(12 lcm -8) =24
(32 lcm 16 3) =96

(x sin) - синус.

(x cos) – косинус.

(x tan) – тангенс.

(x cot) – котангенс.

(x arcsin)=sin-1x

(x arccos)=cos-1x

(x arctan)=tg-1x
(x arctan y)=tg-1(x/y) ,y>0 ,x>0

(x sinh)=(ex-e-x)/2

(x cosh)=(ex+e-x)/2

(x tanh)=sinh(x)/cosh(x)

(x coth)=cosh(x)/sinh(x)

(x arsinh)=sinh-1x

(x arcosh)=cosh-1x

(x artanh)=tanh-1x

(x sqrt [eps])=(x [eps]) - квадратный корень √x с нужной точностью eps>0. [result-epsresult+eps]
По умолчанию точность зависит от архитектуры и чисел. 32bit - 9 цифр, 64bit - 18 цифр.
(x sqrt 1) ≈ Floor[sqrt(x)]
(x sqrt 0.5) ≈ RoundToInteger[sqrt(x)]
Если поставить точность 0.1 то результат будет скромным.
(2 sqrt 0.1) → 1.5
Высокая точность займёт на вычисления больше времени.
(2 sqrt 1e-24) → 1/627013566048/1513744654945
Существуют два результата, возвращается положительный.
(9 sqrt) → 3
Другой: -3
(8i sqrt) → 2+2i
Другой: -2-2i
(x cbrt) - кубический корень ∛x
Существуют три результата. Если число не мнимое, возвращается не мнимый результат.
(8 cbrt) → 2
Если число чисто мнимое (real=0), возвращается чисто мнимый результат.
(8i cbrt) → -2i
Чтобы получить все три результата нужно поворачивать комплексное число на угол ⅔π.
(nil let ((x (2-2i cbrt)))
   (cout writeln x)
   (cout writeln ((x abs) polar ((x arg) + (pi * 2/3))))
   (cout writeln ((x abs) polar ((x arg) - (pi * 2/3))))) →
1.36602540378-0.366025403784i
-0.366025403784+1.36602540378i
-1-1i

(x exp) – экспонента ex

(b ^ n) – степень bn

(x log [a])=logax - логарифм по основанию a (по умолчанию натуральный логарифм).

(x ln)=ln(x) - натуральный логарифм.

(n string [digc]) - возвращает строку, которая точно представляет число. Может быть в дробном виде. При необходимости устанавливается максимальное количество цифр digc.
(4/6 string) → "2/3"
(4/6 string 2) → "6.7e-1"
(4/6 string 0) → "6.66666666667e-1" ; 12 цифр

(x !)=1*2*…*x – факториал.

(nil random) - возвращает случайное вещественное число, в интервале [0…1).
(nil random) → 0.102355897908
(numb random) - возвращает случайное вещественное число, меньшее по абсолютному значению, чем numb.
(pi random) → 2.0939049352352
(-3 random) → -1.194246236960
(numb randomcomplex) - возвращает случайное комплексное число, меньшее по абсолютному значению, чем abs|numb|. Распределение равномерное.
(10 randomcomplex) → -5.74660815753-7.37486568128i
(10i randomcomplex) → 0.108014340751-4.54071316933i
(number for symbol {body})=(number symbol {body}) – параллельно локальным переменным symbol (для каждого процесса своя переменная symbol) присваиваются числа 0…number-1, при каждом значении вычисляются пошагово формы body. ∀=((8704 char) symbol)
(3 for i (cout write " i+1=" (i + 1)) (i + 1)) →
i+1=2 i+1=1 i+1=3
→ nil

Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (number for … (nil throw 'break) … ) break last-task)
(number for* symbol {body}) – пошагово локальной переменной symbol присваиваются числа 0…number-1, вычисляются пошагово формы body. Возвращается последний результат формы body.
(3 for* i (cout writeln "i=" i "..")) →
i=0..
i=1..
i=2..
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (number for* … (nil throw 'break) … ) break last-task)
(number setf number)=(number number number) - физически меняет число новым значением. Возвращается модифицированный объект. Использование данной операции чревато ошибками программирования.
('x set 7) → 7
('y set (nil list x x x)) → (7 7 7)
(x setf (x - 1)) → 6
y → (6 6 6)
Для избежания порчи работающей программы следует пользоваться функцией копирования:
(nil let ((x 0)) … → (nil let ((x (0 copy))) …
('x set 0) → (x setf 0)
(nil setq x 0) → (x setf 0)
(number swap number) - физически меняет значения чисел. Смена производится очень быстро. Использование данной операции чревато ошибками программирования.
('x set 3) → 3
('y set 4) → 4
('z set (nil list x y)) → (3 4)
(x swap y) → 4
x → 4
y → 3
z → (4 3)
(number copy)=('number newobject number) - возвращает новое число.
('number newobject)≈(0 copy)
('number newobject number)=(number copy)
('number newobject number number)C(number number)
(number += [{x}])≈(number setf (number + [{x}]))
(number -= [{x}])≈(number setf (number - [{x}]))
(number *= [{number}])≈(number setf (number * [{number}]))
(number /= [{number}])≈(number setf (number / [{number}]))
(number degrees)=number*180/π
(number radians)=number/180*π
(n combin x)=C(x,n)=n!/x!/(n-x)!
(n combina x)=n!/(n-x)!
(x multinomial y … z)=(x+y+…+z)!/x!/y!…/z!
(number round [diff]) - возвращает округление: [number-diff … number+diff]
>(pi round 1e-3)
3/15/106
>(e round 1e-3)
2.71875
; = 2/23/32
(
x round 1) = [x]
(x round)=(x round 0.5) = [x+0.5]
(number num) - положительный целый числитель числа. (num=numeratoreng)
(number denom) - положительный целый знаменатель числа. (denom=denominatoreng)
(number real) - вещественная часть числа. x+yi → x
(number imag) - мнимая часть числа. x+yi → y
(number conj) - сопряжение числа. x+yi → x-yi
(abs polar arg) - число в тригонометрической форме. abs*(cos(arg)+i*sin(arg))
(number arg) - аргумент arg(number) число -π…π
(number erf) - функция ошибок нормального распределения (Гаусс): erf(x) = 2/√π0x(ⅇ-t2)ⅆt

Список

(list first) - возвращает первую часть списка list.
('(1 2 3) first)→1
(nil first)→nil
(list rest) - возвращает хвостовую часть списка list.
('(1 2 3) rest) → (2 3)
(nil rest)→nil

(list second)=((list rest) first)

(list third)=(((list rest) rest) first)

(list size) - возвращает длину списка list (количество списочных ячеек).
(nil size) → 0

(nil cons first rest) - создаёт списочную ячейку с соответственными ссылками.

('cons newobject first rest)=(nil cons first rest)
('cons newobject another-cons)=(another-cons copy)
('cons newobject)=(nil cons nil nil)

(list elt [{integer}]) - возвращает элемент списка listinteger,…. Элементы списка нумеруются: 0 - first(list) 1 - second(list) … (size-1) – first(last(list)).
('((1 2) (3 4)) elt) → ((1 2) (3 4))
('((1 2) (3 4)) elt 0) → (1 2)
('((1 2) (3 4)) elt 0 1) → 2
('((1 2) (3 4)) elt 0 1 2) → nil

(nil list arg1 … argn) - возвращает список аргументов (arg1 … argn), аргументы вычисляются параллельно

(nil list* arg1 … argn) - возвращает список аргументов (arg1 … argn-1 . argn), последний аргумент соединяется как хвост, аргументы вычисляются параллельно
(nil list* 'a 'b '(c d e)) → (a b c d e)
(list last) - возвращает последнюю списочную ячейку
('(1 2 3) last) → (3)
('(1 2 . 3) last) → (2 . 3)
('() last) → nil
(list + [{list}]) - возвращает объединение списков list. Все списки не разрушаются.
('(1 2 3) + '(4 5 6)) → (1 2 3 4 5 6)
('(1 2 3) + ’atom '(a) nil '(dotted . list)) → (1 2 3 a dotted . list)
(list reverse) – создаёт новый список с обращением порядка элементов. Зацикленный список не поддерживается.
('(1 2 3 . tail) reverse) → (3 2 1)
(list cycledp) – Проверка на зацикленный список. Время выполнения O(n²).
(nil setq l '(1 2 3))
(l cycledp) → false
(((l rest)rest)setrest l) → (3 1 2 .. 3 1 2 ... )
(l cycledp) → (1 2 3 .. 1 2 3 ... )
(list remove elt) – удаляет из списка элементы удовлетворяющие равенству (elt = listi), возвращает новый список без данных элементов
('(1 2 3) remove 2) → (1 3)
(list substitute old new) – замена элементов old на new (при сравнении используется метод =). Возвращает новый список.
('(a x x a) substitute 'x 'b) → (a b b a)

(cons copy) - копия одного звена списка.

(list copy-list) - возвращает новый список. Копируются только ячейки верхнего уровня. Копирование зацикленных списков не поддерживается. Время выполнения O(n).

(list copy-list-protected) - возвращает новый список. Копируются только ячейки верхнего уровня. Поддерживается копирование зацикленных списков. Время выполнения O(n²).

(list copy-tree) - возвращает новое дерево. Копируются все ячейки, и first и rest.

(list subseq [indexfirst [indexend]]) - без аргументов возвращает копию списка. С одним аргументом возвращает новый список из элементов начиная с индекса indexfirst. Индексы это целые числа, нумерация начинается с нуля. Второй индекс представляет предельное значение. Элемента списка по данному индексу в результате не будет.
('(0 1 2 3) subseq) → (0 1 2 3)
('(0 1 2 3) subseq 1) → (1 2 3)
('(0 1 2 3) subseq 1 2) → (1)
(list without [iteratorlimit]) - без аргумента возвращает копию списка. Возвращает новый список из элементов начиная с начала без элементов, представленных аргументом. Итератор это предельная ячейка списка.
(nil setq l '(a b c d))
('i set (l rest)) → (b c d)
(l without i) → (a)
('j set (i rest)) → (c d)
(l without j) → (a b)
(cons setfirst newfirst) - заменяет головную часть списка cons объектом newfirst
(list setrest newrest) - заменяет хвостовую часть списка list объектом newrest. Если list элемент вашей программы, то надо знать, что эти процедуры изменяют саму программу и тяжело представить как она потом выглядит. Чтобы у вас не было ошибок используйте в программе не (nil let ((l '(nil progn)… а (nil let ((l (list nil 'progn)…
(cons cons first rest)=(cons setfirst first),(cons setrest rest)
(cons cons another-cons)=(cons setf another-cons)
(consthis setf consarg)=(consthis setfirst (consarg first)),(consthis setrest (consarg rest)) - заменяет части ячейки на новые, предоставленные consarg. Использование данной операции чревато ошибками программирования.
(consthis swap consarg) - меняют ссылки списочных ячеек. Использование данной операции чревато ошибками программирования.
(list += [{list}]) - все списки объединяет, разрушает их структуру, кроме последнего. Возвращает объединённый список. Зацикленные списки не поддерживаются.
('list1 set '(a b . c))
('list2 set '(c d . e))
('list3 set '(e f . g))
(list1 += list2 list3)
list1 → (a b c d e f . g)
list2 → (c d e f . g)
list3 → (e f . g)
(list for* symbol {body}) – пошагово локальной переменной symbol присваиваются элементы списка list, вычисляются пошагово формы body. Возвращается последний результат формы body.
('(1 2 3) for* i (cout writeln "i=" i "..")) →
i=1..
i=2..
i=3..
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (list for* … (nil throw 'break) … ) break last-task)
(list for symbol {body}) – параллельно локальным переменным symbol (для каждого процесса своя переменная symbol) присваиваются элементы списка list, при каждом значении вычисляются пошагово формы body. Зацикленные списки не поддерживаются.
('(1 2 x) for i (nil if (nil not (nil numberp i)) (cout writeln i " is not number"))) →
x is not number
nil
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (list for … (nil throw 'break) … ) break last-task)

(list assoc who [testeql]) - возвращает пару (obj . obj-value) из списка ((a . 1) (b . 2) … (c . 3)) при которой who=obj если эта пара там существует, и nil - при отсутствии значения. При поиске используются предикаты равенства объектов testeql, по умолчанию: =

(list rassoc who [testeql]) - возвращает пару (obj . obj-value) из списка ((a . 1) (b . 2) … (c . 3)) при которой who=obj-value если эта пара там существует, и nil - при отсутствии значения. При поиске используются предикаты равенства объектов testeql, по умолчанию: =
('((1 . a) (2 . b) (3 . c)) rassoc 'c) → (3 . c)

(nil acons x y a-list)=(nil cons (nil cons x y) a-list) – добавляет в ассоциативный список пару (x . y), результат надо сохранять: ('a-list set (nil acons x y a-list))

(а-список pairlist ключи-список данные-список) – возвращает ассоциативный список из списка ключей и списка данных, а также добавляет старый а-список.
('((a . 1)) pairlist '(b c) '(2 3)) → ((b . 2) (c . 3) (a . 1))

(list = list … list) - сравнения содержания всех списков

(list <> l1 … ln) - ни один список li не равен list.

(list contain item [test]) – находится ли item в списке. По умолчанию test равен =. Возвращается элемент списка или false.
('(a b c d) contain 'c) → (c d)

(list vector) - возвращает новый вектор с элементами списка

(nil vector) - возвращает новый пустой вектор #()

(list map fn [{list}]) - применение функции fn к элементам list и элементам [{list}]. Значением переменной fn может быть имя или лямбда список. Возвращается список результатов. Вычисления производятся параллельно.
('(1 2 3 4) map '- '(1 1 1 1)) → (0 1 2 3)
('(1 2 3 4) map '-) → (-1 -2 -3 -4)
('(1 2.3 x "4") map '(lambda () (nil numberp this))) → (1 2.3 false false)
(list mapc fn [{list}]) - применение функции fn к элементам list и элементам [{list}]. Значением переменной fn может быть имя или лямбда список. Не возвращает значение. Используется для получения побочного эффекта. Вычисления производятся параллельно.

(list count [{x}]) - количество элементов списка удовлетворяющих запросу (elt = [{x}]).

(list count-if fn [{x}]) - количество элементов списка удовлетворяющих запросу (elt fn [{x}]).

(list find [{x}]) - возвращается списочная ячейка, содержащая элемент удовлетворяющий условию (elt = [{x}]).
('(1 2 3) find 2) → (2 3)
('(1 2 3) find 4) → nil
(list find-if fn [{x}]) - возвращается списочная ячейка, содержащая элемент удовлетворяющий условию (elt fn [{x}]).
('(1 2 3) find-if 'evenp) → (2 3)
('(1 2 3) find-if '> 10) → nil
(list nsubstitute old new) - заменяет элементы списка удовлетворяющие условию (elt = old) на новое значение new.
(list nsubstitute-if fn new) - заменяет элементы списка удовлетворяющие условию (elt fn) на новое значение new.
(tree nsubst [{old new}]) - заменяет элементы дерева, удовлетворяющие условию (elt = old) на новое значение new. Ветви дерева обрабатываются параллельно, набор правил последовательно.
('(x 2 (y x (4 6 7 . x) x 6) 8 9) nsubst 'x 'www 'y -7 'www '(x)) →
((x) 2 (-7 (x) (4 6 7 x) (x) 6) 8 9)

Сбалансированное бинарное дерево

('btree newobject method-less) - новое пустое дерево с аргументом: функция "меньше". Удобнее передавать лямбда функцию.
('btree newobject '(lambda (x) (this < x)))

(btree btree method-less) - опустошает дерево, меняет функцию "меньше".

(btree insert x) - добавляет элемент в дерево. При обнаружении присутствия "равного" элемента - меняет его. Возвращает количество вставленных новых элементов: 1 или 0. Скорость O(log(size)).
(btree-target insert btree-source) - добавляет все элементы в дерево. При обнаружении присутствия "равного" элемента - меняет его. Возвращает количество вставленных новых элементов. Скорость O(n*log(size)).
(btree erase x) - изымает элемент из дерева. Возвращает количество удалённых элементов: 1 или 0. Скорость O(log(size)).
(btree erase btree-node) - изымает предоставленный элемент дерева. Возвращает количество удалённых элементов: 1. Скорость O(log(size)). Если дерево не содержит данный элемент, эффект не определён.

(btree find content) - поиск элемента. Возвращает элемент дерева или nil. Скорость O(log(size)).

(btree method-less) - возвращает функцию порядка дерева.

(btree clear) - опустошает дерево. Скорость O(1).

(btree size) - возвращает количество элементов в дереве. Скорость O(1).

(btree empty) - предикат пустого дерева. Скорость O(1).

(btree copy) - возвращает новое дерево с идентичным содержимым. Скорость O(size).

(btree-target set btree-source) - устанавливает копию дерева, с заменой функции сортировки. Скорость O(size).

(btree swap btree) - полный обмен содержимым. Скорость O(1).

(btree list) - возвращает новый список элементов дерева. Скорость O(size).

(btree vector) - возвращает новый вектор элементов дерева. Скорость O(size).

(btree begin) - возвращает элемент дерева с "минимальным" содержимым. Скорость O(log(size)).

(btree end) - возвращает элемент дерева с "максимальным" содержимым. Скорость O(log(size)).

(btree root) - возвращает элемент дерева со "средним" содержимым. Корень дерева. Скорость O(1).

  Дерево состоит из элементов. Пользоваться ими можно для просмотра содержимого, перехода в другие узлы.

(btree-node content) - возвращает содержимое в данном узле. Скорость O(1).

(btree-node next) - возвращает следующий узел с элементом, который "больше", или nil. Скорость O(log(size)).

(btree-node prev) - возвращает предыдущий узел с элементом, который "меньше", или nil. Скорость O(log(size)).

(btree-node left) - возвращает узел, где все элементы поддерева меньше элемента данного узла. Может возвратить nil. Скорость O(1).

(btree-node right) - возвращает узел, где все элементы поддерева больше элемента данного узла. Может возвратить nil. Скорость O(1).

(btree-node back) - возвращает узел, который ведёт к корню дерева. Может возвратить nil, если данный узел это корень. Скорость O(1).

('btree-node newobject father content left right balance)

(btree-node btree-node father content left right balance)

(btree-node insert content method-less)

(btree-node erase content|btree-node method-less)

(btree-node find content method-less)

(btree-node copy)

(btree-node begin)

(btree-node end)

(btree-node list nprocs)

(btree-node vector vector index)

Вектор

(vector elt [i [j … [k]]]) - возвращает элемент вектора vectori,j,…,k. Элементы вектора нумеруются от 0 до size-1.

(vector size) - возвращает длину вектора vector
(#() size)→0
(#(1) size)→1
(vector resize size [new]) – подправляет длину вектора размером size, если нужно добавить размер, дополнительные элементы инициализируются new.
(vector clear)=(vector resize 0)
(vector setelt i j … k new) – устанавливает новое значение по индексам i,j,…,k на new. Возвращает подправленный vector.
(#(1 #(2 3) 4) setelt 1 1 'new) → #(1 #(2 new) 4)
(vector reverse) – создаёт новый вектор с обращением порядка элементов
(#(1 2 3) reverse) → #(3 2 1)
('vector newobject dimlist [init]) - создаёт вектор размерности dimlist1×dimlist2×…×dimlistn с элементами init.
('vector newobject '(2 2) 0) → #(#(0 0) #(0 0))
('vector newobject number [init]) - создаёт одномерный вектор размерности number с элементами init.
('vector newobject 2 0) → #(0 0)
('vector newobject another-vector)=(another-vector copy)
('vector newobject another-vector integer-index-start)=(another-vector subseq integer-index-start)
('vector newobject another-vector integer-index-start integer-index-end)=(another-vector subseq integer-index-start integer-index-end)
('vector newobject) → #()
(vector merge {vector}) - возвращает объединение векторов vector. Все вектора не разрушаются
(#(1 2) merge #() #(3 4)) → #(1 2 3 4)
(vector subseq [a [e]]) - При отсутствии аргументов возвращается копия вектора. Возвращает новый вектор с элементами по индексам начиная с a-го. Параметр e - задаёт индекс, начиная с которого данные не копируются.
(#(1 2 3 4) subseq 1) → #(2 3 4)
(#(1 2 3 4) subseq 1 2) → #(2)
(vector push item)item добавляется в вектор vector, возвращается vector
(vector push item n)item добавляется n раз в вектор vector, возвращается vector
('x set #(1 2))(x push 3)→#(1 2 3)
x=#(1 2 3)
('x set #(1 2))(x push 3 2)→#(1 2 3 3)
x=#(1 2 3 3)
(vector pop) - удаляет из вектора последний элемент и возвращает его.
('y set #(1))
(y push 2) → #(1 2)
(y pop) → 2
y → #(1)
(vector contain item [test]) – находится ли item в векторе. По умолчанию test равен =. Возвращается индекс найденного элемента или false.
(#(a b c d) contain 'c) → 2
(#(a b c d) contain 'e) → false
(vector for* symbol {body}) – пошагово локальной переменной symbol присваиваются элементы вектора vector, вычисляются пошагово формы body. Возвращается последний результат формы body.
(#(1 2 3) for* i (cout writeln "i=" i "..")) →
i=1..
i=2..
i=3..
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (vector for* … (nil throw 'break) … ) break last-task)
(vector for symbol {body}) – параллельно локальным переменным symbol (для каждого процесса своя переменная symbol) присваиваются элементы вектора vector, при каждом значении вычисляются пошагово формы body.
(#(1 2 3) for i (cout write " i+1=" (i + 1)) (i + 1)) →
i+1=3 i+1=2 i+1=4
→ nil
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (vector for … (nil throw 'break) … ) break last-task)

(vector copy) - возвращает новый вектор.

(vector copy-matrix) - возвращает новый вектор. Если элемент - вектор, то он также копируется.

(vectorthis setf vectorarg) - полная замена элементов вектора на новые, предоставленные vectorarg.

(vector vector dimlist [init])≈(vector setf ('vector newobject dimlist [init]))
(vector vector number [init])≈(vector setf ('vector newobject number [init]))
(vector vector another-vector)=(vector setf another-vector)

(vector vector another-vector integer-index-start) - даёт значения начиная со стартовой позиции.
(#() vector #(1 2 3) 1) → #(2 3)
(vector vector another-vector integer-index-start integer-size) - даёт значения начиная со стартовой позиции, с определённым размером вектора.
(#() vector #(1 2 3) 1 2) → #(2)

(matrix transpose) - возвращает новую матрицу с переставленными элементами
(#(#(1 2) #(3 4)) transpose) → #(#(1 3) #(2 4))
(vector + {vector}) - сложение векторов чисел, матриц и других объектов, у которых существует метод +.
(#(1 2) + #(3 -4)) → #(4 -2)
(#(#(1 2) #(3 4)) + #(#(1 0) #(0 -1))) → #(#(2 2) #(3 3))
(vector - {vector}) - вычитание векторов чисел, матриц и других объектов, у которых существует метод -. Возвращает новый вектор.
(#(1 2) - #(3 -4)) → #(-2 6)
(#(1 2) -) → #(-1 -2)
(#(#(1 2) #(3 4)) - #(#(1 0) #(0 -1))) → #(#(0 2) #(3 5))
(vector * number … ) - умножение элементов вектора на число number, возвращает новый вектор.
(vector * vector) - скалярное произведение.
(#(1 -2) * 2 -3) → #(-6 12)
(#(1 2) * #(-2 1)) → 0

  Вектор векторов подразумевает матрицу. Матрица задаётся построчно. Первый элемент вектора это первая строка матрицы, второй - вторая, и т.д. Операции +, -, * задаются в математическом смысле.

R=M+N Ri,j=Mi,j+Ni,j
R=M-N Ri,j=Mi,j-Ni,j
R=m*N Ri,j=m*Ni,j

(vector remove elt) – удаляет из вектора элементы удовлетворяющие равенству (elt = vectori), возвращает новый вектор без данных элементов
(#(1 2 3) remove 2) → #(1 3)
(vector = v1 … vn) – равенство vector=v1=…=vn
У элементов вектора должен быть метод <>.
(vector <> obj1 … objn) - ни один аргумент obji не равен vector.
У элементов вектора должен быть метод <>.
(vector list) - возвращает новый список элементов вектора
(#(1 2) list) → (1 2)
(vector empty) - предикат пустого вектора
(#(1 2) empty) → false
(#() empty) → #()
(vector insert integer-place x) - вставляет x на место integer-place.
(#(1 2) insert 1 7) → #(1 7 2)
(vector += [{vector}])≈(vector setf (vector + [{vector}]))
(vector -= [{vector}])≈(vector setf (vector - [{vector}]))
(vector *= [{number}])≈(vector setf (vector * [{number}]))
(vector swap integer-index integer-index) - меняет местами элементы вектора. Возвращает вектор.
(vector swap vector) - меняет состав векторов. Смена проводится очень быстро.
('v set #(1 2 3)) → #(1 2 3)
('w set #(a b)) → #(a b)
(v swap w) → #(a b)
v → #(a b)
w → #(1 2 3)
(vector first)=(vector elt 0)
(vector last)=(vector elt ((vector size) - 1))
(vector map fn [{vector}]) - применение функции fn к элементам vector и элементам [{vector}]. Значением переменной fn может быть имя или лямбда список. Возвращается вектор результатов. Вычисления производятся параллельно.
(#(1 2 3 4) map '- #(1 1 1 1)) → #(0 1 2 3)
(#(1 2 3 4) map '-) → #(-1 -2 -3 -4)
(#(1 2.3 x "4") map '(lambda () (nil numberp this))) → #(1 2.3 false false)
(vector mapc fn [{vector}]) - применение функции fn к элементам vector и элементам [{vector}]. Значением переменной fn может быть имя или лямбда список. Не возвращает значение. Используется для получения побочного эффекта. Вычисления производятся параллельно.

(vector count [{x}]) - количество элементов вектора удовлетворяющих запросу (elt = [{x}]).

(vector count-if fn [{x}]) - количество элементов вектора удовлетворяющих запросу (elt fn [{x}]).

(vector find [{x}]) - возвращается индекс элемента вектора удовлетворяющий условию (elt = [{x}]).
(#(1 2 3) find 2) → 1
(#(1 2 3) find 4) → nil
(vector find-if fn [{x}]) - возвращается индекс элемента вектора удовлетворяющий условию (elt fn [{x}]).
(#(1 2 3) find-if 'evenp) → 1
(#(1 2 3) find-if '> 10) → nil
(vector nsubstitute old new) - заменяет элементы вектора удовлетворяющие условию (elt = old) на новое значение new.
(vector nsubstitute-if fn new) - заменяет элементы вектора удовлетворяющие условию (elt fn) на новое значение new.
(vector sort) - сортировка элементов вектора (метод порядка <).
(#(1 2 3 4 3 2 1) sort) → #(1 1 2 2 3 3 4)

Байт-вектор

('byte-vector newobject size [init]) - создаёт байт-вектор размера size с элементами init.
('byte-vector newobject 2 1) → #[1 1]
('byte-vector newobject 2) → #[0 0]
('byte-vector newobject another-byte-vector)=(another-byte-vector copy)
('byte-vector newobject another-byte-vector integer-index-start)=(another-byte-vector subseq integer-index-start)
('byte-vector newobject another-byte-vector integer-index-start integer-index-end)=(another-byte-vector subseq integer-index-start integer-index-end)
('byte-vector newobject) → #[]

(byte-vector byte-vector size [initvalue])=(byte-vector resize size [initvalue])
(byte-vector byte-vector size)=(byte-vector resize size 0)
(byte-vector byte-vector another-byte-vector)=(byte-vector setf another-byte-vector)

(byte-vector byte-vector another-byte-vector integer-index-start) - даёт значения начиная со стартовой позиции.
(#[] byte-vector #[1 2 3] 1) → #[2 3]
(byte-vector byte-vector another-byte-vector integer-index-start integer-size) - даёт значения начиная со стартовой позиции, с определённым размером вектора.
(#[] byte-vector #[1 2 3] 1 2) → #[2]

(byte-vector copy) - возвращает новую копию байт-вектора.

(byte-vector setf another-byte-vector) - полное изменение размера и данных

(byte-vector swap integer-index integer-index) - меняет местами элементы вектора. Возвращает вектор.
(byte-vector swap byte-vector) - меняет состав векторов. Смена проводится очень быстро.
('v set #[1 2 3]) → #[1 2 3]
('w set #[127 128]) → #[127 128]
(v swap w) → #[127 128]
v → #[127 128]
w → #[1 2 3]
(byte-vector size) - возвращает длину вектора.
(#[] size)→0
(#[1] size)→1

(byte-vector elt i [number-result-place]) - возвращает элемент вектора byte-vectori. Элементы вектора нумеруются от 0 до size-1. При присутствии аргумента number-result-place новое число не создаётся: (byv elt ind num)(num setf (byv elt ind)).

(byte-vector setelt [i [new]]) – устанавливает новое значение по индексу i на new. Возвращает подправленный byte-vector. Если аргумент new не указан - устанавливается 0.
(#[1 2 3] setelt 1 127) → #[1 127 3]
(byte-vector resize [size [new]]) – подправляет длину вектора размером size, если нужно добавить размер, дополнительные элементы инициализируются new. По умолчанию новые элементы будут иметь значение 0.
(byte-vector push-back [new]) – добавляется новое значение в конец вектора. Возвращает подправленный byte-vector. Если аргумент new не указан - добавляется 0.
(#[1 2 3] push-back 127) → #[1 2 3 127]
(byte-vector push-front [new]) – добавляется новое значение в начало вектора. Возвращает подправленный byte-vector. Если аргумент new не указан - добавляется 0.
(#[1 2 3] push-front 127) → #[127 1 2 3]
(byte-vector pop-back [number-result]) – извлекает значение из конца вектора и возвращает это значение. При наличии аргумента number-result новое число не создаётся: (vec pop-back num)(num setf (vec pop-back)). При пустом векторе возвращается nil.
('v set #[1 2 3]) → #[1 2 3]
(v pop-back) → 3
v → #[1 2]
(byte-vector pop-front [number-result]) – извлекает значение из начала вектора и возвращает это значение. При наличии аргумента number-result новое число не создаётся: (vec pop-front num)(num setf (vec pop-front)). При пустом векторе возвращается nil.
('v set #[1 2 3]) → #[1 2 3]
(v pop-front) → 1
v → #[2 3]
(byte-vector clear)=(byte-vector resize 0)
(byte-vector empty) - предикат пустого вектора.
(#[1 2] empty) → nil
(#[] empty) → #[]
(byte-vector back [number-result]) – значение в конце вектора. При наличии аргумента number-result новое число не создаётся: (vec back num)(num setf (vec back)). При пустом векторе возвращается nil.
(#[1 2 3] back) → 3
(byte-vector front [number-result]) – значение в начале вектора. При наличии аргумента number-result новое число не создаётся: (vec front num)(num setf (vec front)). При пустом векторе возвращается nil.
(#[1 2 3] front) → 1
(byte-vector vector [vector-result]) – возвращает новый вектор из чисел элементов byte-vector. При присутствии аргумета vector-result числа устанавливаются туда.
(#[1 2 3] vector) → #(1 2 3)
('v set #(7 7 7 7)) → #(7 7 7 7)
(#[1 2 3] vector v) → #(1 2 3)
v → #(1 2 3)
(byte-vector string [string-result]) – возвращает новую строку из символов, задаваемых с помощью чисел элементов byte-vector как код. При присутствии аргумета string-result символы устанавливаются туда.
(#[49 50 51] string) → "123"
('s set "abcd") → "abcd"
(#[49 50 51] string s) → "123"
s → "123"
(byte-vector list) – возвращает список из чисел byte-vector.
(#[] list) → nil
(#[1 2 3] list) → (1 2 3)
(byte-vector subseq [a [e]]) - При отсутствии аргументов возвращается копия вектора. Возвращает новый вектор с элементами по индексам начиная с a-го. Параметр e - задаёт индекс, начиная с которого данные не копируются.
(#[1 2 3 4] subseq 1) → #[2 3 4]
(#[1 2 3 4] subseq 1 2) → #[2]
(byte-vector contain item [test]) – находится ли item в векторе. По умолчанию test равен =. Возвращается индекс найденного элемента или false.
(#[10 11 12 13] contain '12) → 2
(#[10 11 12 13] contain '14) → false

Строки

(str size) - возвращает длину строки

('string newobject size [char]) - создаёт строку размера size. Заполняется буквами char, по умолчанию пробелами.
('string newobject another-string)=(another-string copy)
('string newobject another-string integer-index-start)=(another-string subseq integer-index-start)
('string newobject another-string integer-index-start integer-index-end)=(another-string subseq integer-index-start integer-index-end)
('string newobject) → ""

(str1 + {strn|char}) - возвращает объединение строк str… Все строки не разрушаются
('x set "Year")("New" + " " x #\!) → "New Year!"

(str0 = str1 … strn) – равенство str0=str1=…=strn

(str <> st1 … stk) - ни одна строка sti не равна str
(nil not (str <> st1 … stk)) - строка равна одному из аргументов.

(str0 < str1 … strn), (str0 > str1 … strn), (str0 <= str1 … strn), (str0 >= str1 … strn) – по коду букв (словарному порядку).

(str min str … str), (str max str … str) – минимальная/максимальная

(obj string) -– создаёт строку, которая представляет собой строковое представление объекта obj. Поддерживается преобразование типов: nil, boolean, char, number, symbol, byte-vector.
(('(1) rest) string) → "NIL"
('abcd string) → "abcd"
(str elt ind) – буква на месте ind.
Если ind превышает размер строки возвращается nil.
(str setelt ind newchar) – ставит другую букву newchar на месте ind. Возвращает подправленную строку str.
Если ind превышает размер строки, то строка увеличивает свой размер с добавлением пробелов.
(string subseq [a [e]]) - При отсутствии аргументов возвращается копия строки. Возвращает новая строка с элементами по индексам начиная с a-го. Параметр e - задаёт индекс, начиная с которого данные не копируются.
("abcd" subseq 1) → "bcd"
("abcd" subseq 1 2) → "b"

(str lower) – возвращает новую строку с буквами в нижнем регистре

(str upper) – возвращает новую строку с буквами в верхнем регистре

(str read) - конвертирует строку в объект Лиспа (встроенный синтаксический анализатор)

(string for* symbol {body}) – пошагово локальной переменной symbol присваиваются элементы строки string, вычисляются пошагово формы body. Возвращается последний результат формы body.
("(1 2 3)" for* i (cout writeln "i=" i "..")) →
i=(..
i=1..
i= ..
i=2..
i= ..
i=3..
i=)..
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (string for* … (nil throw 'break) … ) break last-task)
(string for symbol {body}) – параллельно локальным переменным symbol (для каждого процесса своя переменная symbol) присваиваются элементы строки string, при каждом значении вычисляются пошагово формы body.
("abc" for i (cout write " number(i)=" (i number)) (i number)) →
number(i)=99 number(i)=98 number(i)=97
→ nil
Остановить цикл внутри тела удобнее с помощью исключений.
(nil try (string for … (nil throw 'break) … ) break last-task)
(string contain char [test]) – находится ли char в строке. По умолчанию test равен =
("abcd" contain #\c) → 2
("abcd" contain #\e) → false
(string list) – возвращает список букв.
("Abcd" list) → (#\A #\b #\c #\d)
(string vector) – возвращает вектор букв.
("Abcd" vector) → #(#\A #\b #\c #\d)
(string byte-vector) – возвращает байт-вектор кодирования строки в UTF-8.
(string remove elt) – удаляет из строки элементы удовлетворяющие равенству (elt = stringi), возвращает новую строку без данных элементов
("ABBA" remove #\B) → "AA"

(string copy) - возвращает новую строку.

(string setf string) - физически заменяет строку новым значением. Использование данной операции чревато ошибками программирования.
('x set "abc") → "abc"
('y set (nil list x x x)) → ("abc" "abc" "abc")
(x setf (x upper)) → "ABC"
y → ("ABC" "ABC" "ABC")
Для избежания порчи работающей программы следует пользоваться функцией копирования:
(nil let ((x "")) … → (nil let ((x ("" copy))) …
('x set "abc") → (x setf "abc")
(nil setq x "abc") → (x setf "abc")

(string swap string) - физически обменивается значения.

(string string number [char])≈(string setf ('string newobject number [char]))
(string string another-string)=(string setf another-string)
(string string another-string integer-index-start)=(another-string subseq integer-index-start)
(string string another-string integer-index-start integer-index-end)=(another-string subseq integer-index-start integer-index-end)

(string resize newsize [char]) - изменяет размер строки на newsize. Новые буквы определяются с помощью char. По умолчанию пробелами.
(string += [{char|string}])≈(string setf (string + [{char|string}]))
(string nsubstitute index size char|string) - заменяет участок строки начиная с index по index+size-1 на новую строку или букву.
("aha" nsubstitute 1 1 "bb") → "abba"
(string nsubstitute char char) - заменяет буквы на новые.
("aha" nsubstitute #\a #\A) → "AhA"
(string nsubstitute-if method char) - заменяет буквы удовлетворяющие результату работы метода method на новое значение char.
("10x15" nsubstitute-if '(lambda () (nil not (this digitp))) #\space) → "10 15"

(string count [{x}]) - количество элементов строки удовлетворяющих запросу (elt = [{x}]).

(string count-if fn [{x}]) - количество элементов строки удовлетворяющих запросу (elt fn [{x}]).

(string find [{x}]) - возвращается индекс элемента строки удовлетворяющий условию (elt = [{x}]).
("abcE" find #\E) → 3
("abcE" find #\e) → nil
(string find-if fn [{x}]) - возвращается индекс элемента строки удовлетворяющий условию (elt fn [{x}]).
("abcE" find-if 'upperp) → 3
("abcE" find-if 'digitp) → nil

Буквы

(char0 = char1 … charn) – равенство char0=char1=…=charn

(char <> char1 … charn) – ни один chari не равен char
(nil not ( char <> char1 … charn) - один из аргументов равен объекту

(char0 <= [char1 … charn])char0≤char1≤…≤charn

(char0 < [char1 … charn])char0<char1<…<charn

(char0 > [char1 … charn])char0>char1>…>charn

(char0 >= [char1 … charn])char0≥char1≥…≥charn

(char min char … char), (char max char … char) – минимальный/максимальный

(number char) - возвращает букву с кодом number XML

(ch number) - возвращает код буквы ch XML

(ch byte-vector) - возвращает байт-вектор UTF-8.

(byte-vector char) - возвращает первую букву из byte-vector UTF-8

(ch alphap) - буква в верхнем или нижнем регистре #\a…#\z #\A…#\Z

(ch upperp) - буква в верхнем регистре #\A…#\Z

(ch lowerp) - буква в нижнем регистре #\a…#\z

(ch digitp) - #\0…#\9

(ch spacep) - символ-разделитель

(ch controlp) - управляющий символ (ASCII 0…31 или 127)

(ch printp) - можно ли распечатать

(ch upper) - эквивалент буквы в верхнем регистре

(ch lower) - эквивалент буквы в нижнем регистре

(charthis setf chararg)=(charthis char [chararg]) - изменяет значение буквы на новое, предоставленные chararg. Использование данной операции чревато ошибками программирования.
(charthis swap chararg) - меняет значения букв. Использование данной операции чревато ошибками программирования.
(char copy) - возвращает новую букву.
('char newobject char)
('char newobject) - не определённая.

Замки и сигналы

  Используется для монопольного доступа к важным участкам программы.

('lock newobject) - создаёт замок.

(lock progn {body})=(nil progn (lock set) {body} (lock unlock)) - устанавливается замок и пошагово вычисляет задачи body. После выполнения всех задач замок освобождается. Если замок был закрыт, то ожидается его открытие.

(lock try task-locked task-free) - при успешной установке замка вычисляется задача task-locked, иначе task-free.

(lock set) - устанавливается замок. Если замок был закрыт, то ожидается его открытие.

(lock unlock) - открытие замка. Если замок был открыт, вызоветься исключение.

('signal newobject) - создаёт объект сигнал.

(signal wait [lock]) - ожидает сигнал. Если предоставлен замок, то он отключается и при получении сигнала устанавливается.
(lock progn
  …
  (signal wait lock)
  …)

(signal send) - посылает сигнал.

Объектно-ориентированное программирование

  Создана эта техника программирования для-того чтобы люди смогли физически понять очень большую программу. И объектом называется часть кода, у которого есть несколько функций общения с другой частью программы.
  Все встроенные типы имеют свой класс, можно узнать его имя с помощью функции (nil type-of obj).

(имя-класса defclass) – минимальное пока ещё пустое определение. Возвращается имя класса.

(имя-класса defclass pclass1 … pclassn) - определение класса с родительскими классами pclass1…pclassn
Перегрузка методов/статических переменных происходит слева направо:
методы из pclassn перегружают pclassn-1 ,… методы данного класса перегружают все остальные.

(имя-класса defvar [{varname}]) - добавляет поля к классу. Символы varname не вычисляются. Возвращается имя класса.
Внешнего доступа до переменных объекта нет. Можно только с помощью методов.

(имя-класса defstatic varname startvalue) - добавляет/изменяет статическое поле класса. Все аргументы вычисляются.

(имя-класса defmethod methodname (… args …) {methodbody}) - добавляет метод к классу. Задачи methodbody будут вычислятся пошагово.
В отличие от большинства языков, возможно динамическое изменение методов в процессе работы программы - и все существующие объекты будут соответственно менять своё "поведение".

(имя-класса defmacro macroname (… args …) {macrobody}) - добавляет макрос к классу.

  Определить закрытую функцию для работы внутри объекта можно с помощью статических переменных, определённых как ламбда список.
('className defstatic 'functionName '(lambda ( … arguments … ) function-body))
  Чтобы запустить такую функцию нужно использовать funcall:
(nil funcall this functionName … arguments … )

(имя-класса getmethod methodname) - возвращает определение метода. methodname вычисляется. Если такого метода нет, то nil.

(имя-класса getclass) - возвращает определение класса. Если такого класса нет, то nil.

Использование:
(obj) → obj
(obj method arg1 … argn) - вызов метода method объекта obj.

(имя-класса newobject {args}) - создаёт новый объект данного класса.
Если был создан метод с именем класса запускается этот конструктор с аргументами {args}.

(object copy) - возвращает новый объект.

(nil private [object [{tasks}]]) - выполнить задачи внутри объекта с полным доступом к связям переменных. Данную функцию можно вызывать только внутри метода данного класса.
('cl defclass)
('cl defvar v)
('cl defmethod cl (x)
   (nil setq v x))
('cl defmethod v () v)
('cl defmethod move (x)
   (nil setq v
     (nil private x
       (nil let ((vold v))
         (nil setq v nil)
         vold))))
(nil setq a ('cl newobject 1) b ('cl newobject 2))
(a v)→1
(b v)→2
(a move b)
(a v)→2
(b v)→nil

Работа с потоками ввода/вывода

  Есть три стандартных потока, которые используются функциями по умолчанию. Они хранятся в переменных cin, cout и cerr.

(stream write obj … obj) - выводит значения obj в удобном для просмотра человека виде. Возвращается поток.

(stream princ obj … obj) - выводит значения obj в виде, пригодном для ввода в интерпретатор. Возвращается поток.

(stream writeln obj … obj) - вызывает функцию write и делает перевод строки. Возвращается поток.

(stream print obj … obj) - вызывает функцию princ и делает перевод строки. Возвращается поток.

(string open [{mode}]) - открывает файл с именем string и возвращает связанный с ним поток. Режим потока задаётся с помощью символов mode. По умолчанию считается на чтение и запись.
Режим mode может задаваться символами:
inна чтение
outна запись
in-outна чтение и запись
truncурезать файл до нулевой длины
app (append) добавление в конец (и только)
ate (at end) открытие и поиск конца файла (можно двигаться назад)
async включает ввод-вывод, управляемый сигналом
cloexec устанавливает флаг close-on-exec на новом файловом дескрипторе
direct Файловый ввод-вывод выполняется непосредственно в/из буферов пространства пользователя.
directory Если строка не является каталогом, то завершить вызов с ошибкой.
dsync Операции записи файла будут выполнены согласно требованиям целостности синхронизации ввода-вывода, но обновляются только те метаданные, которые требуются для выполнения последующего чтения.
sync Операции записи файла будут выполнены согласно требованиям целостности синхронизации ввода-вывода.
excl Гарантирует, что вызов создаст файл: если этот флаг указан вместе с create а файл уже существует, то open завершится с ошибкой.
largefile (LFS) Позволяет открывать файлы, чей размер нельзя представить 32 битным типом.
noatime Не обновлять время последнего доступа к файлу (st_atime в inode) при его чтении.
noctty Если строка указывает на терминальное устройство, то оно не станет управляющим терминалом процесса, даже если процесс такового не имеет.
nofollow Если строка является символьной ссылкой, то открытие завершится неудачно.
nonblock или ndelay Если возможно, файл открывается в неблокирующем режиме.
path Получить файловый дескриптор, который можно использовать для двух целей: для указания положения в дереве файловой системы и для выполнения операций, работающих исключительно на уровне файловых дескрипторов.
create если файл не существует, то он будет создан ( out и trunc )
tmpfile Создание безымянного временного файла. В строке указывается каталог; безымянная inode будет создана в файловой системе этого каталога.
fd file descriptor linux
Для режимов create и tmpfile нужно устанавливать права для будущего доступа к файлу.
rwxusr00700 пользователь (владелец файла) имеет права на чтение, запись и выполнение файла
rusr00400 пользователь имеет права на чтение файла
wusr00200 пользователь имеет права на запись в файл
xusr00100 пользователь имеет права на выполнение файла
rwxgrp00070 группа имеет права на чтение, запись и выполнение файла
rgrp00040 группа имеет права на чтение файла
wgrp00020 группа имеет права на запись в файл
xgrp00010 группа имеет права на выполнение файла
rwxoth00007 все остальные имеют права на чтение, запись и выполнение файла
roth00004 все остальные имеют права на чтение файла
woth00002 все остальные имеют права на запись в файл
xoth00001 все остальные имеют права на выполнение файла
suid04000 set-user-ID бит (при запуске имеет права владельца)
sgid02000 set-group-ID бит (при запуске имеет права группы владельца) (В директории все новые файлы получают группу данной директории)
svtx01000 закрепляющий бит (в данной директории удалить файл может только владелец данного файла)

(string create)=(string open 'out 'trunc) - создаёт новый пустой файл с именем string и возвращает связанный с ним поток для записи.

(stream close) - закрывает поток. Возвращает nil при успехе или один из символов badf, intr, io при ошибке.

(stream read) - читает из потока строковое представление объекта и возвращает объект Lisp2D.

(stream read-line [string]) - читает строку символов из потока и возвращает строку без символа перевода строки. Если предоставлена строка string результат будет помещён туда. При нахождении конца файла возвращается nil.
(cin read-line) - из консоли

(stream read-char [char]) - читает 1 символ из потока. Если предоставлен char результат будет помещён туда. Возвращается символ или nil.

(stream read-byte [number]) - читает 1 байт из потока и возвращает целое число. Если предоставлено число number результат будет помещён туда. Возвращается число 0..255 или nil.

(stream listen) - возвращает true когда в потоке не обнаружен признак конца файла, иначе - false

(stream openp) - возвращает stream если поток открыт, иначе - false.

(stream terpri) - пишет символ конца строки в поток stream

(stream write-byte number|byte-vector) - пишет в поток 1 байт или byte-vector байт. Возвращается число записанных байт или символ ошибки (один из again, badf, destaddrreq, dquot, fault, fbig, intr, inval, io, nospc, perm, pipe, wouldblock).

(stream tell) - возвращает целое число - позицию чтения/записи потока

(stream seek number [mode]) - устанавливает позицию записи/чтения в потоке. Возвращает число - позицию в потоке.
Первый байт имеет позицию 0, последний size-1

Символ mode задаёт режим отсчёта позиции:
begот начала текущего файла
curот текущей позиции плюс число
endот конца текущего файла плюс число
holeпервое попавшееся пустое место в файле после указанной позиции или конец
dataпервое попавшееся заполненое данными место в файле

(stream flush) - очищает буфер потока. Возвращает nil при успехе или символ io | rofs | inval | badf | fail | nobuf.

(string|stream truncate size) - изменяет размер файла задаваемого с помощью имени string или потока stream. Возвращается символ ошибки (access, fault, fbig, intr, inval, io, isdir, loop, nametoolong, noent, notdir, perm, rofs, txtbsy, badf) или nil, если всё в порядке.

(string|stream chdir) - делает текущим заданный каталог. Возвращает nil или символ ошибки access, badf, fault, io, loop, nametoolong, noent, nomem, notdir.
(string-filename|stream change-owner-group [number-UID|nil [number-GID|nil]]) - устанавливает идентификатор владельца и группы файла (если предоставлена ссылка, то у адресата ссылки). При предоставлении nil владелец/группа не изменится. (У простого пользователя нет прав на это изменение). Возвращает nil или символ ошибки (access, fault, loop, nametoolong, noent, nomem, notdir, perm, rofs, badf, io).
("." change-owner-group 1000 100) → nil
("." change-owner-group nil 101) → perm
("." change-owner-group 1001) → perm
(string-filename lchange-owner-group [number-UID|nil [number-GID|nil]]) - устанавливает идентификатор владельца и группы самой ссылки (если это обычный файл то у файла). При предоставлении nil владелец/группа не изменится. (У простого пользователя нет прав на это изменение). Возвращает nil или символ ошибки (access, fault, loop, nametoolong, noent, nomem, notdir, perm, rofs, badf, io).

Stat - статус файла

  Структура данных о файле. Берётся с помощью пути или потока.

(stat stat [stat|string-path|stream]) - конструктор
('stat newobject) - новая пустая структура
('stat newobject stat) - новая копия
('stat newobject string-path)=(string-path stat)
('stat newobject stream)=(stream stat)

(string-path stat [stat-place]) - возвращается статус файла по пути string-path. Если путь это ссылка, то возвращается статус файла на которого указывает ссылка. Если аргументом предоставлено stat-place, то результат прописывается в это место. При ошибке возвращается символ ( access , badf , fault , loop , nametoolong , noent , nomem , notdir , overflow ) .

(string-path lstat [stat-place]) - возвращается статус файла по пути string-path. Если путь это ссылка, то возвращается статус именно самой ссылки. Если аргументом предоставлено stat-place, то результат прописывается в это место. При ошибке возвращается символ ( access , badf , fault , loop , nametoolong , noent , nomem , notdir , overflow ) .

(stream stat [stat-place]) - возвращается статус потока stream. Если аргументом предоставлено stat-place, то результат прописывается в это место. При ошибке возвращается символ ( access , badf , fault , loop , nametoolong , noent , nomem , notdir , overflow ) .

(stat setf [statx]) - в структуру stat копируются данные statx. Возвращается сам объект.

(stat swap [statx]) - обмен данных структур stat и statx. Возвращается сам объект.

(stat device) - список чисел ( major minor ).
(("lisp2d" stat) device) → (9 0)
(stat rdevice) - список чисел ( major minor ). Идентификатор устройства (для специального файла).
('s set ("lisp2d" stat))
(s device) → (9 0)
(s rdevice) → (0 0)
('s set ("/dev/tty" stat))
(s device) → (0 6)
(s rdevice) → (5 0)
(stat inode) - число, номер индексного узла.
(("lisp2d" stat) inode) → 1714521
(stat permissions) - список прав, может содержать символы svtx , sgid , suid , xoth , woth , roth , xgrp , wgrp , rgrp , xusr , wusr , rusr . см. права
(("." stat) permissions) → (xoth roth xgrp rgrp xusr wusr rusr)
(stat file-type) - символ, тип файла. ( socket , link , regular , block , directory , character , fifo , ? ) .
(("." stat) file-type) → directory
(stat links) - число, количество жёстких ссылок.
(("lisp2d" stat) links) → 1
(stat uid) - число, идентификатор пользователя файла.
(("lisp2d" stat) uid) → 1001
(stat gid) - число, идентификатор группы файла.
(("lisp2d" stat) gid) → 100
(stat totalsize) - размер файла в байтах.
(("lisp2d" stat) totalsize) → 1198880
(stat blocksize) - оптимальный размер блока для операций ввода-вывода.
(("." stat) blocksize) → 4096
(stat blocks) - общее число блоков по 512 байт.
(("." stat) blocks) → 8
(stat access-time) - время последнего обращения. Возвращает объект класса time.
(stat modify-time) - время последнего изменения. Возвращает объект класса time.
(stat change-time) - время последнего изменения статуса. (например : owner, group, количество links, mode, итд.) Возвращает объект класса time.

Окна

('window newobject width height) – создаёт окно шириной width и высотой height. Возвращает объект для работы с окном.
(window window [width height]) – коструктор.

(win close) – закрывает окно

  Координаты определяются слева направо и сверху вниз.

(nil mapwindow width height) – создаёт окно без вывода на экран.

(window-mapped open) – отображает окно на дисплее. Возвращается окно или false.

(window openp) – открыто ли окно.

(window hide) – закрывает окно, оставляя изображение.

  Прорисовка изображения с закрытым окном намного быстрее.

(win rename string) – даёт заголовок окну.

(win move x y) – переносит окно на координату (x y)

(win resize w h) – изменяет размеры окна и матрицу цветов

(win map-resize ширина высота) – изменяет размер матрицы цветов.

(nil display-size) – возвращает размеры дисплея в пикселях как список чисел (width height)
(nil display-size) → (1280 1024)
(nil display-sizemm) – возвращает размеры дисплея в милиметрах как список чисел (width height)
(nil display-sizemm) → (342 271)

(nil screen-count) – возвращает целое число.

(win width) - ширина окна в пикселях

(win height) - высота окна в пикселях

(window pointer-coord) - возвращает локальные координаты указателя как список (x y).

(window wait-event) - ожидает событие в окне и возвращает его.
  События предоставляются списком, где первым элементом предоставляется символ. С каждым событием может быть предоставлена вспомогательная информация. Поддерживаются такие события:
(button-press button x y) - нажатие на клавишу мыши. button - номер кнопки: число 1..7. x,y - координата указателя мыши в момент события.
(button-release button x y) - отпускание клавиши мыши. button - номер кнопки: число 1..7. x,y - координата указателя мыши в момент события.
(key-press char|number) - нажатие на кнопку клавиатуры. Возвращается char, если кнопка предоставляет собой букву в кодировке UTF-8, иначе number как код управляющей клавиши. Коды клавиш предоставлены значениями глобальных переменных: xk-enter, xk-home, xk-end, xk-left, xk-right, xk-up, xk-down, xk-page-up, xk-page-down, xk-insert, xk-delete, xk-caps-lock, xk-shift-l, xk-shift-r, xk-control-l, xk-control-r, xk-alt-l, xk-alt-r, xk-f1, xk-f2, xk-f3, xk-f4, xk-f5, xk-f6, xk-f7, xk-f8, xk-f9, xk-f10, xk-f11, xk-f12, xk-backspace, xk-undo, xk-num-lock, xk-kp-multiply, xk-space, xk-numbersign, xk-question
(key-release) - отпускание кнопки клавиатуры.
(window-close) - нажатие клавиши закрыть окно.
(configure-notify ширина высота) - изменение размера окна.

(window check-event) - попытка загрузки события в окне, при отсутствии события возвращается nil.

(window make-event ev) - добавляет событие окну. Возвращает событие.

(window pending) - возвращает количество уже накопившихся событий окна.

(win getpixel x y) – возвращает цвет точки как (r g b), при координатах за пределами окна возвращает nil

(win draw-pixel col|(colr colg colb) x y x y … x y) – рисует точки на экране заданным цветом [0…1] Если цветом поставлено число, то будет серым оттенком, иначе ([0…1] [0…1] [0…1])=(red green blue)
  У координаты x берётся только целая часть, находятся от 0 до width-1
  У координаты y берётся только целая часть, находятся от 0 до height-1
  Такой смысл координат только для работы с пикселями.

  У функций прорисовки не для работы с пикселями координаты в окне это числа с плавающей запятой от 0 до width(height). Запуск функций прорисовки при координатах за этими пределами не приводит к ошибке а игнорируется.

(win draw-square col|(colr colg colb) x y w h … x y w h) – рисует закрашенные прямоугольники заданным цветом [0…1] Если цветом поставлено число, то будет серым оттенком, иначе ([0…1] [0…1] [0…1])=(red green blue)
  Начальным углом обозначается x y , ширина и высота w h.
  Координаты для прорисовки в окне задаются числами с плавающей запятой от 0 до width(height). Чтобы закрасить всё окно в один цвет можно сделать это так:
  (win draw-square col 0 0 w h).
  Чтобы нарисовать линии по краю окна можно использовать:
  (win draw-square col 0 0 1 h 0 0 h 1 0 h w -1 w 0 -1 h)
  Нарисовать одну точку:
   (win draw-square col x y 1 1)
  Если координаты не целые функция draw-square сглаживает изображение. Поэтому можно прорисовать очень много маленьких прямоугольников и это дает эффект полупрозрачности.

(nil let ((size 200) halfsize shift w (map 10) size/map)
  (nil setq
    halfsize (size / 2)
    shift (size / 20)
    size/map (size / map)
    w ('window newobject (size + 1) (size + 1)))
  ((map + 1) for i
    (w draw-square '(0 1 1)
      0 (i * size/map) (size + 1) 1
      (i * size/map) 0 1 (size + 1)))
  (halfsize for i
    (w draw-square '(1 0 0)
      (i - shift) (i + shift) halfsize (i / halfsize)))
  (halfsize for i
    (w draw-square '(0 0 1)
      (i + shift) (i - shift) (i / halfsize) halfsize))
  (cout write "press a key...")
  (nil let (en)
    (nil do-while
      (nil setq en ((w wait-event) first))
      (nil not (nil or (en = 'key-press) (en = 'button-press)))))
  (w close))

(win draw-line col|(colr colg colb) radius x y x y … x y) - рисует линии заданным цветом [0…1]. Если цветом поставлено число, то будет серым оттенком, иначе ([0…1] [0…1] [0…1])=(red green blue). radius - задаёт толщину линии, точнее радиус.

Пространство имён

  Предназначено оно для ослабления перегрузки имён функций и констант.
Рекомендуется определять функции и переменные в личном пространстве, так как если пользоваться другими программами и они переопределят функцию с таким-же названием - то доступиться до неё нельзя.

('name namespace {body}) - подключает все константы и функции определённые в данном пространстве имён и выполняются пошагово задачи body.
  Определять эти константы очень просто:
('version1 namespace
  ('conste letset 1000)
  (nil defmethod m (x)
    (cout write "x=" x)))
('version1 namespace
  (nil m conste))

  Извне этого пространства невозможно ими пользоваться:
conste → error
(nil m 1) → error

Почти все функции языка определены в пространстве имён std и можно вызывать эти функции с перегруженным определением другими программами так:
('another namespace
  ('number defmethod ! () (cout write "another"))
  …
  ('std namespace
    (3 !) → 6
    …)
  …)

Дата и время

(nil daylightp) - время часового пояса должно корректироваться с использованием летнего времени.
(nil daylightp) → TRUE

(nil setdaylightp flag) - установка флага того, что время часового пояса должно корректироваться с использованием летнего времени

(nil timezone) - смещение часового пояса в секундах
((nil timezone) / 60 60) → -2

(nil settimezone sec) - установка смещении часового пояса в секундах

(nil tzname) - строки, характеризующие часовой пояс
(nil tzname) → ("EET" "EEST")

(nil settzname string string) - установка строк, характеризующих часовой пояс

(nil time {form}) - вычисляет пошагово формы form и возвращает время выполнения в секундах.
(nil time 1) → 0.00088
(nil localtime) - возвращает объект класса time.
(nil localtime) → Time(2008 4 19 17 51 28.0957 6 109 true)

  Определён класс объектов time, у которых есть методы.

(time year)
(time setyear integer)
(time month) → 1…12
(time setmonth integer)
(time day) → 1…31
(time setday integer)
(time hour) → 0…23
(time sethour integer)
(time minutes) → 0…59
(time setminutes integer)
(time seconds) → 0…59.999999
(time setseconds number)
(time weekday) → 0…6
0 = воскресенье
(time yearday) → 0…365
(time dstp) - время часового пояса должно корректироваться с использованием летнего времени. Возвращает true|false|nil.
(time number) - время в секундах прошедших с 1 января 1970 года по UTC (Гринвичу). Используется для синхронизации по времени.
(time string)
((nil localtime) string) → "Sun Apr 20 19:43:08 2008"
(nil uptime) - время в секундах, прошедшее с момента загрузки системы
(nil uptime) → 8301
('time newobject) → Time(1970 1 1 3 0 0 4 0 false)
('time newobject time)=(time copy)
('time newobject number) - установка времени, исходя из нулевой точки: 1 января 1970г. UTC (Greenwich)
(time time time)=(time setf time)
(time time number) - установка времени, исходя из нулевой точки: 1 января 1970г. UTC (Greenwich)
(time setf time)
(time swap time)
(time = [{x}]), (time <> [{x}]), (time < [{time}]), (time > [{time}]), (time <= [{time}]), (time >= [{time}]), (time min [{time}]), (time max [{time}])

Каталоги

  Для работы с каталогами существует класс dir.

('dir newobject)=('dir newobject ".")
('dir newobject string-path)
(dir dir string-path)=(dir open string-path)

(dir swap dir)

(dir open string-path) - открытие каталога.

(dir openp) - открыт или нет.

(dir close) - закрытие каталога.

(dir read) - возвращает строку или nil (если файлы закончились).

  Программа вывода содержимого текущего каталога:
(nil let (s (d ('dir newobject)))
  (nil do-while
    (nil if ('s set (d read))
      (cout writeln s)))
  (d close))

(dir rewind) - переход в начало каталога.

(dir seek integer-loc) - переход к требуемому местоположению.
integer-loc - это НЕ порядковый номер элемента каталога.
(dir tell) - получить текущую позицию в каталоге.
Позиция - это НЕ порядковый номер элемента каталога.

(string rmdir) - удаляет пустой каталог. Возвращает nil или символ ошибки access, busy, fault, inval, loop, nametoolong, noent, nomem, notdir, notempty, perm, rofs.

(nil getcwd) - строка, имя текущего каталога.
(nil getcwd) → "/home/alex/lisp2d"
(string-name mkdir [{access-mode}]) - создаёт каталог с правами доступа. По умолчанию у владельца полный доступ, у остальных только просмотр. access-mode могут быть символы rwxusr, rusr, wusr, xusr, rwxgrp, rgrp, wgrp, xgrp, rwxoth, roth, woth, xoth, suid, sgid, svtx. см. права

Socket. Сети.

('socket newobject)
(socket socket)
(socket open
  domain
  type ) - возвращает nil или строку "PROTONOSUPPORT"|"NFILE"|"MFILE"|"ACCES"|"NOBUFS"|"NOMEM"|"INVAL"|"?".
domain = ("UNIX" | "LOCAL" | "INET" | "INET6" | "IPX" | "NETLINK" | "X25" | "AX25" | "ATMPVC" | "APPLETALK" | "PACKET")
type = ("STREAM" | "DGRAM" | "SEQPACKET" | "RAW" | "RDM")
(socket descriptor) - возвращает число положительное при связанном сокете или -1 в отсутствии подключения.
(socket close)
domain = "UNIX" :
(socket connect string-path) - возвращает nil или строку ( "BADPATH" | "BADF" | "FAULT" | "NOTSOCK" | "ISCONN" | "CONNREFUSED" | "TIMEDOUT" | "NETUNREACH" | "ADDRINUSE" | "INPROGRESS" | "ALREADY" | "AGAIN" | "AFNOSUPPORT" | "ACCES" | "PERM" | "ADDRNOTAVAIL" | "INVAL" | "INTR" | "PROTOTYPE" | "NOSR" | "?" ).
Подключение клиентское желательно делать циклом с паузой.
(nil  let ((socketname  (nil  const "Мой Сокет")))
  (nil  let ((sc  ('socket  newobject)))
    (sc open  "UNIX"  "STREAM")
    (nil  while (sc connect socketname)
      (1  sleep))
    …))
domain = another :
(socket connect number-port string-addr) - возвращает nil или строку ( "NOADDRSUCCEEDED" | "BADADDR" | "?" | "ADDRFAMILY" | "AGAIN" | "BADFLAGS" | "FAIL" | "FAMILY" | "MEMORY" | "NODATA" | "NONAME" | "SERVICE" | "SOCKTYPE" | "SYSTEM" | "??" ).
(socket bind number-port|string-path) - возвращает nil или строку "BADF" | "INVAL" | "ACCES" | "NOTSOCK" | "ROFS" | "FAULT" | "NAMETOOLONG" | "NOENT" | "NOMEM" | "NOTDIR" | "LOOP" | "?"
(socket listen n-connections) - возвращает nil или строку "ADDRINUSE" | "BADF" | "NOTSOCK" | "OPNOTSUPP" | "?"
Включение UNIX сервера задаётся последовательностью вызовов: создание socket-файла, open, bind, listen.
(nil  let ((socketname  (nil  const "Мой Сокет")))
  (socketname unlink)
  (nil  let ((sc  ('socket  newobject)))
    (sc open  "UNIX"  "STREAM")
    (sc bind  socketname)
    (sc listen  socket-max-connections)
    …
    (sc close))
  (socketname unlink))
(socket accept) - возвращает новый сокет при успехе или при ошибке строку "AGAIN" | "BADF" | "NOTSOCK" | "OPNOTSUPP" | "INTR" | "CONNABORTED" | "INVAL" | "MFILE" | "NFILE" | "FAULT" | "NOBUFS" | "NOMEM" | "PROTO" | "PERM" | "NOSR" | "SOCKTNOSUPPORT" | "PROTONOSUPPORT" | "TIMEDOUT" | "?".
При реализации функции сервера цикл вызовов accept желательно сделать в отдельном потоке.
(nil  fork|parallel
  (nil  while (nil  not flagtoquit)
    ('s set (socket accept))
    …  ))
((( … socket-read … ) ( … socket-write … ) ( … socket-error … )) socket-select [time-out-seconds]) - проверяет способность сокетов для чтения из них (и/или они ожидают информацию) (и/или произошла ошибка). Возвращается список списков сокетов, прошедших проверку: (( … socket-read … ) ( … socket-write … ) ( … socket-error … )). Если предоставлен аргумент time-out-seconds, функция может выйти из ожидания и вернуть результат nil. При ошибке может вернуться строка "BADF"|"INTR"|"INVAL"|"NOMEM"|"?".
(socket read byte-vector-buf [size [{"OOB"|"PEEK"|"WAITALL"|"TRUNC"|"ERRQUEUE"|"NOSIGNAL"}]] ) - получает сообщение из сокета размером с размер буфера или size. Возвращает число - количество принятых байт или строку - ошибку "BADF"|"CONNREFUSED"|"NOTCONN"|"NOTSOCK"|"AGAIN"|"INTR"|"FAULT"|"INVAL"|"?".
(socket write string [{"OOB"|"DONTROUTE"|"DONTWAIT"|"NOSIGNAL"|"CONFIRM"}] )
(socket write byte-vector-buf [size [{"OOB"|"DONTROUTE"|"DONTWAIT"|"NOSIGNAL"|"CONFIRM"}]] ) - отправляет сообщение в сокет размером с размер буфера или size.
Возвращает число - количество отправленных байт или строку - ошибку "BADF"|"NOTSOCK"|"FAULT"|"MSGSIZE"|"AGAIN"|"NOBUFS"|"INTR"|"NOMEM"|"INVAL"|"PIPE"|"?".
(nil open-protoent)
(nil close-protoent)
(nil get-protoent) - возвращает список(number name alias .. alias) или nil

Системные функции

(string-filename system [{string-argument}]) - даёт задачу операционной системе. Возвращается код завершения задачи: 0…255 или nil.
("ls" system "--help") - консольный запрос.
("mc" system) - запускает программу.
(string getenv) - переменная среды
("USER" getenv) → "alex"
("USEr" getenv) → NIL
("HOME" getenv) → "/home/alex"
(string setenv string) - устанавливает переменную среды
("ABC" setenv "DEF")
("ABC" getenv) → "DEF"

(string unsetenv) - сброс значения переменной среды

(nil geteuid) - число, номер идентификатора пользователя

(nil getegid) - число, номер идентификатора группы
Пользователь root имеет номер идентификатора 0

(nil getuid) - число, реальный номер идентификатора пользователя

(nil getgid) - число, реальный номер идентификатора группы
Пользователь root имеет номер идентификатора 0

(nil sysname) - строка, имя операционной системы, например "Linux"

(nil release) - строка, номер версии ядра операционной системы
(nil release) → "2.6.8.1-12mdk"
(nil version) - строка, модификация ядра операционной системы
(nil version) → "#1 Fri Oct 1 12:53:41 CEST 2004"
(nil machine) - строка, платформа на которой работает система
(nil machine) → "i686"
(nil nodename) - строка, имя компьютера
(nil nodename) → "localhost"
(nil totalram) - общий объём оперативной памяти в байтах
((nil totalram) / 0x400) → 256376
(nil freeram) - свободный объём оперативной памяти в байтах
((nil freeram) / 0x400) → 61812
(string accessf) - проверка доступа или существования файла
("Makefile" accessf) → "Makefile"
("MakeFile" accessf) → FALSE
(string accessx) - проверка исполнимости файла
("lisp2d" accessx) → "lisp2d"
("lisp2d.cpp" accessx) → FALSE
(string accessr) - проверка доступа на чтение файла
("lisp2d" accessr) → "lisp2d"
("lisp2dd" accessr) → FALSE
(string accessw) - проверка доступа на запись в файл
("lisp2d" accessw) → "lisp2d"
("lisp2dd" accessw) → FALSE
(string-filename setgid number) - устанавливает идентификатор группы файла.
(string-filename setluid number) - устанавливает идентификатор пользователя ссылки, а не объекта ссылки.
(string-filename setlgid number) - устанавливает идентификатор группы ссылки, а не объекта ссылки.
(string-filename settime [time-access [time-modify]]) - устанавливает время доступа и время изменения файла. При отсутствии аргументов устанавливается текущее время.

(string-oldpath link string-newpath) - создание жёсткой ссылки на файл, не являющейся каталогом.

(string-oldpath symlink string-newpath) - создаёт символическую ссылку.

(string-path readlink) - возвращает строку содержимого файла символической ссылки.

(string unlink) - удаляет файл/снимает членство в каталоге. Возвращает nil при успехе или строку ошибку "ACCES"|"PERM"|"ISDIR"|"BUSY"|"FAULT"|"NAMETOOLONG"|"NOENT"|"NOTDIR"|"NOMEM"|"ROFS"|"LOOP"|"IO"|"?".

(string rename string) - изменяет имя или позицию файла/каталога
("readme" rename "doc/readme") → "doc/readme"
(string ls) - чтение содержимого каталога, возвращает список имён.
("." ls) → ("." ".." "tmp" ".desktop" "work.cpp" …)
(".." ls) → ("." ".." "alex")

(nil nprocs) - число, количество процессоров системы

(number seteuid) - устанавливает действующий идентификатор пользователя. Возвращает успех: true или false.

(number setuid) - устанавливает реальный идентификатор пользователя. Возвращает успех: true или false. Работает только от прав суперпользователя.
(1002 setuid) → false

(number setegid) - устанавливает действующий идентификатор группы. Возвращает успех: true или false.

(number setgid) - устанавливает реальный идентификатор группы. Возвращает успех: true или false. Работает только от прав суперпользователя.
(1002 setgid) → false
(string vfsblocksize) - оптимальный размер блока для операций ввода-вывода. При неудаче возвращается nil.
("." vfsblocksize) → 4096
(string frsize) - фундаментальный размер блока. При неудаче возвращается nil.
("." frsize) → 4096
(string vfsblocks) - общее число блоков. При неудаче возвращается nil.
("." vfsblocks) → 4046090
(string bfree) - количество свободных блоков для суперпользователя. При неудаче возвращается nil.
("." bfree) → 3308030
(string bavail) - количество свободных блоков для обыкновенного пользователя. При неудаче возвращается nil.
("." bavail) → 3102499
(string files) - общее количество индексных узлов. При неудаче возвращается nil.
("." files) → 2056320
(string ffree) - количество свободных индексных узлов для суперпользователя. При неудаче возвращается nil.
("." ffree) → 2036930
(string favail) - количество свободных индексных узлов для обыкновенного пользователя. При неудаче возвращается nil.
("." favail) → 2036930
(string fsid) - идентификатор файловой системы. При неудаче возвращается nil.
("." fsid) → 1218234540
(string rdonly) - флаг только для чтения: true или false. При неудаче возвращается nil.
("." rdonly) → FALSE
(string nosuid) - возможность setuid/setgid отключена: true или false. При неудаче возвращается nil.
("." nosuid) → FALSE
(string namemax) - максимальная длина имени файла. При неудаче возвращается nil.
("." namemax) → 255

(string setusrreadp flag)

(string setusrwritep flag)

(string setusrexecp flag)

(string setgrpreadp flag)

(string setgrpwritep flag)

(string setgrpexecp flag)

(string setothreadp flag)

(string setothwritep flag)

(string setothexecp flag)

(string setuidp flag) - право на изменение идентификатора пользователя при исполнении.

(string setgidp flag) - право на изменение идентификатора группы при исполнении.

(string setvtxp flag) - ограниченный режим удаления из каталога.

(number-uid uname) - имя пользователя (login).

(number-uid gid) - числовой идентификатор группы по умолчанию.

(number-uid home) - строка, домашний каталог.

(number-uid shell) - командный интерпретатор по умолчанию.

(number-gid gname) - имя группы.

(number-gid gmem) - члены группы.

(nil getlogin) - строка, имя пользователя.

(nil getpid) - возвращает идентификатор процесса.

(nil getppid) - возвращает идентификатор родительского процесса.

(string-path chroot) - изменяет корневой каталог "/". Работает только от прав суперпользователя.

(number nice) - изменение приоритета процесса. Возвращается новый приоритет или nil. Меньший приоритет даёт больше прав.

(nil sethostent stayopen) - запустить обзор базы данных хостов. stayopen - должен быть true или false. Возвращается nil.

(nil gethostent) - получить следующую запись из базы данных хостов. Возвращается список("официальное_имя_хоста" список("альтернативных_имён_хоста") inet|inet6|integer длина_каждого_адреса список(адресов=список(целые_числа))) или nil.
(nil sethostent true) → nil
(nil gethostent) → ("localhost" nil inet 4 ((127 0 0 1)))
(nil endhostent) → nil

(nil endhostent) - завершить обзор базы данных хостов. Возвращается nil.

(nil address-of x) - возвращается физический адрес объекта в памяти компьютера.

(число-секунды sleep) - засыпание на нужное количество секунд. Возвращается оставшееся время при некоторых событиях, обычно 0.

(число-уровень iopl) - изменяет уровень привилегий ввода-вывода вызывающего процесса, как определено двумя младшими значащими битами на уровне. ( число-уровень = 0 .. 3 ) Возвращается ошибка : true - если число не целое или символ inval, nosys, perm.

(число-порт in-byte|in-byte-pause) - возвращает один байт принятый из порта, или символ inval, io, nomem, perm.
(число-порт in-byte-vector байт-вектор|размер) - возвращает новый байт-вектор предоставленого размера или заполненный данными предоставленый байт-вектор. При ошибке возвращается символ inval, io, nomem, perm.

(число-порт out-byte|out-byte-pause 0..255) - посылает в порт один байт, возвращает nil или символ inval, io, nomem, perm.
(число-порт out-byte-vector байт-вектор) - посылает в порт вектор байт, возвращает nil или символ inval, io, nomem, perm.

Предметный указатель

&const
&rest
&whole
#\backspace
#\bell
#\escape
#\feed
#\newline
#\return
#\space
#\tab
#\vtab
!
+ list
+ number
+ string
+ symbol
+ vector
+= cons
+= number
+= string
+= vector
- number
- symbol
- vector
-= number
-= vector
-> imply
* number
* vector
*= number
*= vector
/
/=
= char
= cons
= false
= nil
= number
= string
= symbol
= time
= true
= vector
<> char
<> cons
<> false
<> nil
<> number
<> string
<> symbol
<> time
<> true
<> vector
< char
< number
< string
< symbol
< time
<= char
<= number
<= string
<= symbol
<= time
> char
> number
> string
> symbol
> time
>= char
>= number
>= string
>= symbol
>= time
%
^ expt
and
nand
or
nor
xor
'
`
,
,@
¬ not
for number
λ lambda
sqrt
abs
accept
accessf
accessr
access-time
accessw
accessx
acons
address-of
alphap
and
apply
arccos
arcosh
arcsin
arctan
arg
arg number
arsinh
artanh
assoc
atom
back btree-node
back byte-vector
backquotep
bavail
begin btree
begin btree-node
bfree
bifp
bind
blocks
blocksize
booleanp
boundp
btree
btreep
btree-node
btree-nodep
button-press
button-release
byte-vector byte-vector
byte-vector char
byte-vector string
byte-vectorp
cbrt
ceil
cerr
change-owner-group
change-time
char byte-vector
char char
char number
charp
chdir
check-event
chroot
cin
clear btree
clear byte-vector
clear vector
close dir
close socket
close stream
close window
close-protoent
combin
combina
cond
configure-notify
conj
connect
cons nil
cons cons
consp
const nil
const symbol
constp nil
constp symbol
contain byte-vector
contain list
contain string
contain vector
content
controlp
copy btree
copy btree-node
copy byte-vector
copy char
copy cons
copy number
copy object
copy string
copy time
copy vector
copy-list
copy-list-protected
copy-matrix
copy-tree
cos
cosh
count list
count string
count vector
count-if list
count-if string
count-if vector
cout
create
cot
coth
cycledp
day
daylightp
defclass
defmacro
defmethod
defstatic
defvar
degrees
denom
descriptor
device
digitp
dir
display-size
display-sizemm
do-while
draw-line
draw-pixel
draw-square
dstp
e
elt byte-vector
elt list
elt string
elt vector
empty btree
empty byte-vector
empty vector
end btree
end btree-node
endhostent
environment
environment-external
envp
eq
erase btree
erase btree-node
erf
eval
evenp
exception
exception-history
exp
false
favail
ffree
files
file-type
find btree
find btree-node
find list
find string
find vector
find-if list
find-if string
find-if vector
finitep
first cons
first vector
floor
flush
for list
for number
for string
for vector
for* list
for* number
for* string
for* vector
fork
freeram
front
frsize
fsid
funcall
gcd
gensym
get
get-protoent
getclass
getcwd
getdebug
getegid
getenv
geteuid
getgid
gethostent
getlogin
getmethod
getpid
getpixel
getppid
getuid
gid number
gid stat
gmem
gname
height
hide
home
hour
if
imag
imply
in-byte
in-byte-pause
in-byte-vector
infp
inode
insert btree
insert btree-node
insert vector
integerp
iopl
key-press
key-release
lambda
last cons
last vector
lchange-owner-group
lcm
left
let
letset
link
links
list btree
list btree-node
list byte-vector
list nil
list string
list vector
list*
listen socket
listen stream
listp
ln
load
localtime
lockp
log nil
log number
log-list
lower char
lower string
lowerp
ls
lstat
machine
make-event
map cons
map vector
mapc cons
mapc vector
map-resize
mapwindow
max char
max number
max string
max symbol
max time
merge
method-less
min char
min number
min string
min symbol
min time
minutes
mkdir
mod
modify-time
month
move
multinomial
namemax
namespace
nand
nanp
newobject btree
newobject btree-node
newobject byte-vector
newobject char
newobject cons
newobject dir
newobject lock
newobject number
newobject signal
newobject socket
newobject stat
newobject string
newobject symbols
newobject time
newobject vector
newobject window
next
nice
nil
nodename
nor
nosuid
not
nprocs
nsubst
nsubstitute list
nsubstitute string
nsubstitute vector
nsubstitute-if list
nsubstitute-if string
nsubstitute-if vector
num
number char
number number
number time
numberp
objectp
oddp
open dir
open socket
open string
open window
open-protoent
openp dir
openp stream
openp window
or
out-byte
out-byte-pause
out-byte-vector
package
pairlist
parallel
pending
permissions
pi
pointer-coord
polar
pop
pop-back
pop-front
prev
princ
print
printp
private
progn lock
progn nil
properties
push
push-back
push-front
put
quotep
radians
random
randomcomplex
rassoc
rdevice
rdonly
read dir
read socket
read stream
read string
read-byte
read-char
read-eval-print
read-line
readlink
real
release
remove list
remove string
remove vector
remprop
rename string
rename window
resize byte-vector
resize string
resize vector
resize window
rest
reverse list
reverse vector
rewind
right
rmdir
root
round
save
screen-count
second
seconds
seek dir
seek stream
send
set btree
set lock
set symbol
setday
setdaylightp
setdebug
setegid
setelt byte-vector
setelt list
setelt string
setelt vector
setenv
seteuid
setf backquote
setf byte-vector
setf char
setf cons
setf number
setf quote
setf stat
setf string
setf time
setf unquote
setf unquote-splicing
setf vector
setfirst
setgid number
setgid string
setgidp
setgrpexecp
setgrpreadp
setgrpwritep
sethostent
sethour
setlgid
setluid
setminutes
setmonth
setothexecp
setothreadp
setothwritep
setq
setrest
setseconds
settime
settimezone
settzname
setuid
setuidp
setusrexecp
setusrreadp
setusrwritep
setvtxp
setyear
shell
signalp
sin
sinh
size btree
size byte-vector
size cons
size string
size vector
sleep
socket
socket-max-connections
socket-select
socketp
sort
spacep
sqrt
stat stat
stat stream
stat string
statp
streamp
string
string byte-vector
string number
string string
string time
stringp
subseq byte-vector
subseq list
subseq string
subseq vector
substitute
swap backquote
swap btree
swap byte-vector
swap char
swap cons
swap dir
swap number
swap quote
swap stat
swap string
swap time
swap unquote
swap unquote-splicing
swap vector
symbol
symbolp
symlink
sysname
system
tan
tanh
tell dir
tell stream
terpri
third
this
throw
time nil
time time
timep
timezone
totalram
totalsize
transpose
true
truncate
try lock
try nil
type-of
tzname
uid
uname
unconst nil
unconst symbol
unlink
unlock
unquotep
unquote-splicingp
unsetenv
upper char
upper string
upperp
uptime
vector btree
vector btree-node
vector byte-vector
vector cons
vector nil
vector string
vector vector
vectorp
version
vfsblocks
vfsblocksize
wait
wait-event
weekday
when
while
width
window
window-close
windowp
without
write socket
write stream
write-byte
writeln
xk-…
xor
year
yearday