[an error occurred while processing this directive]

MESSON Subr

(MESSOE число)

См. MESSOFF.

MINUS Subr

(MINUS число)

MINUS принимает значение Т, если ее аргумент - отрицательное число, и - ноль, - в противном случае. Например, (MINUS -4) = T, (MINUS 7) = 0. MINUS принимает значение ноль, если ее аргумент не число, поэтому (MINUS 'IDENTIFIER) = 0.

MODE Subr

(MODE число)

Эта функция реализована в некоторых версиях LISP. Она вызывается с аргументом, который является целым числом в интервале (0,7), и устанавливает соответствующий режим экрана. Режим не изменяется пока LISP не выдаст подсказку готовности 'Evaluate:'. LISP учитывает возможное изменение требований запоминающего устройства к новому режиму. Если вы пытаетесь установить режим высокого разрешения экрана при большом количестве активных данных, произойдет ошибка. Если такой режим допустим, то его задание надежнее осуществить с помощью MODE, чем с помощью прямого вызова VDU.

NIL специальный идентификатор

NIL = 0

NIL - специальный идентификатор, который имеет значение 0 и используется в языке LISP для представления пустых списков и значения 'ложь'. Синтаксис () при вводе аналогичен 0.

NOT Subr

(NOT значение 'истины')

NOT принимает значение Т, если ее аргумент = 0 (т.е. 'ложь'), и равна 0, в противном случае. Обычно используется тогда, когда добавляется значение 'истины'. См. NULL.

NULL Subr

(NULL объект)

NULL = Т, если ее аргумент =0, и равна нулю в противном случае. И поэтому может быть определена

(DEFUN NULL (X) (EQ X NIL))

NULL часто используется для проверки пустого списка. Заметьте, что функции NULL и NOT ведут себя аналогичным образом - две функции существуют независимо, чтобы позволить пользователю обозначить проверку списковых структур или истинных значений. Например:

(NULL T) = 0

(NOT NIL) = T

(NOT (NULL 55)) = T

NUMBERP Subr

(NUMBERP объект)

NUMBERP принимает значение Т, если ее аргумент - число. В противном случае значение = 0. Например,

(NUMBERP (PLUS 3 4)) = T

(NUMBERP 'NUMBER) = NIL,

а в языке LISP Acornsoft

(NUMBERP '1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0) = 0,

т.к. читатель обрабатывает строки цифр как идентификаторы, а не числа.

OBLIST Subr

(OBLIST)

OBLIST - это список всех идентификаторов, известных в LISP, кроме идентификаторов, имеющих значение UNDEFINED (неопределенный) и (или) идентификаторов с пустыми списками характеристик. Эти условия исключают те атомы, которые использовались как символьные строки, а не атомы с интересующими значениями. Порядок атомов в списке соответствует их порядку в памяти. Это в свою очередь зависит от порядка, в котором они создавались. Проверка идентификаторов в (OBLIST) обеспечивает определенную информацию о том, какие функции допустимы в определенном кадре LISP. Слово OBLIST - сокращение от Object List.

ONEP Subr

(ONEP число)

Функция ONEP проверяет является ли ее аргумент 1, и если да, то принимает значение Т. В противном случае, становится равной нулю. Таким образом, (ONEP x) точно соответствует (EQ x 1). См. также ZEROP для краткого теста числа 0.

OPEN Subr

(OPEN имя файла режим)

OPEN открывает названный файл для ввода или вывода. Если режим = 0, то будет создан новый файл; в противном случае, считается, что файл уже существует. Значение функции OPEN - указатель файла (небольшое целое число), которое будет использоваться как аргумент таких функций, как READLINE, YRITE, CLOSE.

OR Fsubr

(OR аргумент1 аргумент2...)

OR принимает значение Т, если по крайней мере один из аргументов ненулевой. Она обрабатывает аргументы по одному, начиная слева пока не встретит ненулевой. Следовательно OR принимает значение Т, не анализируя остальные аргументы. Если до конца списка аргументов функция не встретит ненулевой, она принимает значение ноль. Например,

(OR T (QUOTIENT 1 0) (CAR NIL))

принимает значение Т и обращения к QUOTIENT и CAR (которые при обработке вызывают ошибки) не происходит.

(OR (LISTP 33) (ATOM '(P Q R))) = 0
(OR)                            = 0
(OR (NOT x) (NOT y))            = (NOT (AND x y))

См. также NOT и AND.

ORDINAL Subr

(ORDINAL идентификатор)

ORDINAL принимает числовое значение кода ASCII первого символа имени идентификатора как аргумент. Считается ошибкой если аргумент является чем-нибудь отличным от идентификатора. Идентификатор без имени может быть создан, например, с помощью (IMPLOED NIL). ORDINAL принимает значение 0 для этого специального атома. Например:

(ORDINAL 'ALPHABET) = 65
(ORDINAL CR)        = 13
(ORDINAL 33)        = выдает ошибку.

См. также CHARACTER.

PEEK Subr

(PEEK адрес)

PEEK принимает значение числа, обозначающего расположение в памяти, выраженное аргументом. Адрес должен быть числом. Адреса свыше 32767 должны быть представлены их эквивалентами - отрицательными дополнительными кодами. Автор не гарантирует, что различные варианты ОС ОНИКС постоянно будут использовать те же адреса для хранения тех же чисел, и поэтому программисты, использующие PEEK рискуют получить неработоспособную программу.

PERIOD переменная

PERIOD = символ

В качестве идентификатора функции выступает идентификатор, состоящий из одной точки. См. BLANK, LPAR, RPAR.

PLIST Subr

(PLIST идентификатор)

Функция получает значение списка характеристик идентификатора. Если у идентификатора нет характеристик, то PLIST = 0. Характеристики получают, используя функции PUT и GET, но PLIST можно использовать для проверки поведения блуждающей программы. В данной версии LISP списки характеристик структурированы в виде списков пар точек вида

((характеристика-имя . значение) (хар-ка-имя . значение)...)

Поэтому, например, после

(PUT 'CELLAR 'EAST 'TROLL-ROOM)
(PUT 'CELLAR 'SOUTH 'LOW-RASSAGEWAY)

список характеристик CELLAR следующий:

(PLIST 'CELLAR)=((SOUTH . LOW-RASSAGEWAY)(EAST . TROLL-ROOM))

PLUS Subr

(PLUS число число...)

PLUS принимает значение суммы всех ее аргументов, которые должны быть числами. PLUS может иметь до 28 аргументов, в случае арифметического переполнения она сообщит об ошибке. Например,

(PLUS 6 2 -3) = 5

(RLUS) = 0

См. DIFFERENCE, MINUS и TIMES.

ROINT Subr

(POINT координата х координата y)

POINT докладывает о состоянии экрана компьютера. Ей заданы числовые аргументы: координата х в интервале (0,1279) и координата y в интервале (0,1023). Ее результат - логический цвет в заданной точке экрана. Если аргументы выходят за допустимые пределы, то POINT = -1.

POKE Subr

(POKE адрес число)

POKE хранит один байт, который является вторым аргументом, в памяти, определенной первым аргументом. См. PEEK для обратной операции. POKE может портить произвольное расположение в памяти, и поэтому разрушает целостность структур данных в LISP.

PRIN Subr

(PRIN аргумент1 аргумент2...)

PRIN ведет себя так же, как и PRINC, только она пытается сделать более удобным для повторного чтения вывод в LISP, вставляя символ (!) перед любым специальным символом, присутствующим в данном идентификаторе. Таким образом, (PRIN LPAR BLANK RPAR) выдает сообщение "!(!!)"".

PRINC Subr

(PRINC аргумент1 аргумент2...)

PRINC печатает один за другим аргументы, начиная с текущей позиции печати. Все аргументы обрабатываются до начала печати. PRINC не расставляет пробелы между выводимыми объектами. Расположение на экране зависит от пользователя и может быть установлено если некоторые элементы будут напечатаны CR и BLANK. Значение PRINC определяется последним аргументом. Вывод, организованный PRINC, состоит из тех, символов, которые входят в печатаемый идентификатор.

Таким образом, (PRINC LPAR BLANK RPAR) печатает "( )". См. также PRIN, PRINT и PRINTC.

PRINT Subr

(PRINT аргумент1 аргумент2...)

PRINT ведет себя так же, как и PRIN, однако после очередного вывода, осуществляется вывод с новой строки. Простое обращение к (PRINT) имеет тот же результат, что (PRINC CR), т.е. функция начинает печать новой строки или осуществляет пропуск строки.

PRINTC Fsubr

(PRINTC аргумент1 аргумент2...)

PRINTC аналогична функции PRINC, разница в том, что она печатает новую строку в конце вывода.

PROGN Fsubr

(PROGN действие действие...)

Функция PROGN обрабатывает аргументы один за другим и принимает значение последнего аргумента. Она позволяет обрабатывать несколько выражений, где синтаксис LISP будет другим и будет позволять это. Например,

(PROGN (PRINT 'MESSAGE) 'RESULT)

печатает сообщение и принимает значение RESULT.

(COND
   ((PROGN
       (SETQ X (GET Y 'PROPERTY))
       (PRINT 'PROPERTY '=X)
       (ATOM X))...)
   ...

использует функцию PROGN в предикатном выражении COND таким образом, что последовательность вычислений и печатаемых утверждений трассировки могут предшествовать предикату (ATOM X).

PUT Subr

(PUT идентификатор характеристика-имя значение)

PUT помещает значение в список характеристик данного идентификатора, относящегося к характеристике-имя. Значение выражения PUT - это хранящееся выражение, т.е. третий аргумент. Идентификатор никогда не содержит две характеристики под одним именем: второй вызов PUT с той же характеристикой-имя изменяет старое имя. Значения, сохраненные с помощью PUT обычно восстанавливаются с помощью GET, однако см. также PLIST.

QUOTE Fsubr

(QUOTE аргумент)

QUOTE принимает значение своего единственного необработанного аргумента. Представление (QUOTE что-либо) является внутренним представлением того, что обычно записывается как 'что-либо'.

(QUOTE (ARBITRARY LIST))  = (ARBITRARY LIST)
(QUOTE QUOTE) = 'QUOTE    = QUOTE
'''X                      = (QUOTE (QUOTE (QUOTE X))

QUOTIENT Subr

(QUOTIENT число число)

QUOTIENT принимает значение целой части, которая получается при делении первого аргумента на второй. Оба аргумента должны быть числовыми, а второй не должен равнятся нулю. Например,

(QUOTIENT 22 7) = 3

(QUOTIENT -400 6)=-66

См. также REMAINDER.

READ Subr

(READ)

READ считывает один список или s-выражение с клавиатуры. Это вход в программу на уровне пользователя, который LISP обычно использует для чтения команд. Поэтому все договоренности, которые при этом используются применимы к выражениям при операторе READ. Если оператор READ содержит аргумент, то это может быть указатель файла (см. OPEN), и READ вводит его из указанного файла. См. READLINE и GETCHAR.

READLINE Subr

(READLINE)

READLINE считывает символы с клавиатуры (или из файла, определенного заданием указателя в качестве аргумента). Все символы с текущей позиции в файле до следующего перевода строки собираются в один идентификатор и принимается как значение READLINE. Для выбора символов из этого длинного идентификатора можно использовать ORDINAL или EXPLODE.

(COND
    ((EQ (READLINE) 'YES) T))

проверяет действительно ли следующая строка, которую напечатал пользователь, состоит из символов Y, E и S. Нежелательно печатать в скобках и печатать знаки препинания вместо нужного слова, тогда как, если использовался оператор READ, то такое обозначение возможно.

RECLAIM Subr

(RECLAIM)

Вызов RECLAIM в LISP осуществляет сбор 'мусора'. Принимаемое значение всегда равно нулю. Если невозможен вывод сообщений о сборе 'мусора'(см. MESSON), то появляется сообщение об объеме свободной памяти. RECLAIM вызывается автоматически, если обнаруживается, что память в LISP находится в беспорядке. Ни при каких обстоятельствах не должно происходить изменения количества данных, которое допустимо в LISP, при обращении пользователя к этой функции. См. GCTIME.

REMAINDER Subr

(REMAINDER число число)

Функция принимает значения остатка от деления первого аргумента на второй. Результат всегда положительный, и для любых чисел P и Q всегда будет

P = (PLUS (TIMES Q (QUOTIENT P Q))
          (REMAINDER P Q)).

Например,

(REMAINDER 22 7) = 1

(REMAINDER -400 6)= 4

REMPROP Subr

(REMPROP идентификатор характеристика-имя)

REMPROP удаляет характеристику из списка характеристик идентфикатора. Значение = Т, если такая характеристика найдена, и равно нулю, - если нет. Например, после

(PUT 'EAGLE 'IS-A 'BIRD)

(PUT 'CROCODILE 'IS-A 'REPTILE)

значение каждого (REMPROP 'EAGLE 'IS-A) и (REMPROP 'CROCODILE 'IS-A) будет равно Т при первичной оценке, и нулю - при последующей. Кроме того, даже после первого обращения (GET 'EAGLE 'IS-A) получит значение ноль, и характеристики IS-A не будет в списке (PLIST 'EAGLE).

RPAR переменная

(RPAR = символ ')')

RPAR = имеет в качестве значения идентификатор ')'. См. BLANK и LPAR.

RPLACA Subr

(RPLACA список изменений-car)

RPLACA меняет местами поле CAR первого аргумента со вторым и принимает значение текущего списка. Если первый аргумент является списком пар точек, то произойдет ошибка. Для второго аргумента ограничений нет. Необходимо соблюдать осторожность при использовании функции RPLACA, т.к. она фактически изменяет ячейку списка в памяти. Поэтому все структуры данных, которые используют эту ячейку также изменятся. Кроме того, RPLACA можно использовать для создания циклических структур, которые приводят к сбою программы печати в языке LISP. Например:

   (SETQ X '(A B C))
   (RPLACA X 'NEW)
   X        сейчас имеет значение (NEW B C)
   (RPLACA X X)

После последнего обращения к RPLACA X относится к списковой структуре (см. рис.)

и при попытке ее печати появится

((((((((((((((((((((((((((((((((((((((((((

и т.д. с сообщением об ошибке.

RPLACD Subr

(RPLACD список изменений-CDR)

RPLACD переписывает поле CDR первого аргумента. Поэтому она аналогична функции RPLACA, и при ее использовании необходимо соблюдать те же предостережения. Например:

   (SETQ X '(A B C))
   (RPLACD (CDR X) '(1 2))

оставляет Х = значению (А В 1 2), а затем

   (RPLACD (CDR X) X)

обеспечивает циклическую структуру, которая печатается как:

   (А В 1 А В 1 А В 1 А В 1...

RESET Subr

(RESET)

RESET очищает счетчики, которые используют TIME и GCTIME. Таким образом, чтобы определить сколько времени затрачивается на выполнение, например, функции TEDIUM, можно использовать фрагмент:

   (PROGN
      (RESET)
      (TEDIUM)
      (LIST (TIME) (GCTIME))),

который в результате принимает значение списка, и показывает принятые в TEDIUM ресурсы.

SAVE Subr

(SAVE имя файла)

Эта функция создает копию всей рабочей области памяти LISP и записывает в файл с именем, указанном в аргументе. Конфигурация, записанная таким образом, затем может быть восстановлена с помощью функции LOAD. Вообще функция SAVE не обладает избирательным действием: она записывает все переменные, все характеристики и все определения функций. Единственное, она обычно вводится непосредственно с клавиатуры.

(SAVE 'EXTEND)

сохраняет файл с именем EXTEND, который может содержать набор общепринятых определений, которые должны быть в начале большинства последовательных сеансов LISP.

SED Expr

(SED выражение)

SED - это подфункция, вызываемая структурным редактором LISP EDIT. Глава 23 содержит подробности его использования.

SET Fsubr

(SET идентификатор значение)

SET оценивает оба аргумента. Первый относится к идентификатору, а значение этого идентификатора изменяется и принимает то значение, которое было задано функцией SET второму аргументу. Это значение принимается. В большинстве случаев у программистов LISP появится необходимость присваивать значения известным невычисленным переменным и здесь лучше использовать SETQ, чем SET. Например:

(SET 'ONE 'THIS)

(SET ONE 'THAT)

присваивает значение THIS переменной ONE, а переменной THIS значение THAT.

SETQ Fsubr

(SETQ идентификатор значение)

SETQ - это обычный оператор присваивания в языке LISP. первый аргумент - текущий идентификатор, второй - произвольное выражение. SETQ принимает значение числа, присвоенного переменной. Например:

(SETQ X (PLUS 25-20))

имеет значение 5 и присваивает это значение переменной Х.

SOUND Subr

(SOUND канал интервал тон длительность)

Все четыре аргумента должны быть числами. Обращение к функции вызывает активность одного из четырех генерирующих звук каналов. Первый аргумент определяет номер канала. Если второй аргумент положительный, он выбирает один из четырех возможных интервалов, который должен задаваться с помощью ENVELOPE. Отрицательное значение второго аргумента определяет тон при одномерной громкости -15 для громкого звука и -1 для едва слышного. Тон ноты определяется в единицах - 1/4 тона. Средний 'С' соответствует числу 53. Длительность звука измеряется в 1/100 секунды. Дальнейшие подробности о том, например, как звуки могут контролироваться для синхронизации двух нот, можно узнать из Руководства пользователю по ВВС микрокомпьютерам.

SUBRP Subr

(SUBRP объект)

SUBRP проверяет является ли ее аргумент входной точкой части программы в машинных кодах, которая относится к обычной функции LISP. Если да, - принимает значение Т; в противном случае - становится равной нулю.

См. Fsubr для проверки специальных функций, которые обрабатывают аргументы необычным путем. Любой объект, который подвергается тестироваию SUBRP также является атомом.

НSPRINT Expr

(SPRINT выражение структурирование)

SPRINT печатает первый аргумент с обычным изображением списковой структуры. Второй аргумент не является обязательным; если он присутствует, то изображение должно выводиться в структурированном виде. Значение второго аргумента может быть положительным или равно нулю. Версия SPRINT, распространенная в LISP, является вариантом программы, приведенной в главе 23, и она использует правильные функции XTAB и CHARCOUNT. SPRINT определяется следующим образом:

(DEFUN SPRINT (X (N . 0)) (COND
   ((OR (ATOM X)
        (CHARCOUNT X (DIFFERENCE LINEWIDTH N)))
             (PRIN X))
   (T (PRINC LPAR)
      (SPRINT (CAR X) N)
      (SETQ N (PLUS N 3))
      (LOOP
         (SETQ X (CDR X))
         (COND ((AND X (ATOM X)) (PRINC PERIOD X)))
         (UNTIL (ATOM X) (PRINC RPAR))
         (XTAB N)
         (SPRINT (CAR X) N)))))

T специальный идентификатор

Т = Т

Т имеет значение Т. Он служит для обозначения логического значения 'истина'. Все функции LISP, которые принимают булевые значения равны Т, если значение 'истина' и ноль - если 'ложь'. Таким образом,

(NUMBERP 2) = T

(NULL NIL) = T

(NOT T) = 0

TIME Subr

(TIME)

TIME принимает значение времени, (исключая время, звтраченное на сбор 'мусора') затраченного с последнего вызова RESET. Результат измеряется в 1/100 секунды. Ограниченный диапазон арифметики LISP означает, что вычисления выполняемые TIME, занимают 5 или 10 минут, и поэтому если функция используется для выполнения вычислений, то следует сразу же вызвать функцию RESET до начала выполнения теста, и установить, что эксперимент завершается внутри себя в течение 1-2 минут. Для измерения слишком больших промежутков времени с точки зрения функции TIME, можно использовать функцию CLOCK.

.сс

[an error occurred while processing this directive]