Какие свойства относятся к символу
В Лиспе с символом можно связать именованные свойства (property). Свойства символа записываются в хранимый вместе с символом список свойств (property list, p-list).
У свойств есть имя и значение
Список свойств может быть пуст или содержать произвольное количество свойств. Его форма такова:
(имя1 значение1 имя2 значение2 … имяN значениеN)
Например, у символа ЯГОДА-РЯБИНЫ может быть такой список свойств:
(вкус кислый цвет красный)
Список свойств символа можно использовать без особых ограничений, его можно по необходимости обновлять или удалять. Программист должен сам предусматривать и обрабатывать интересующие его свойства.
Системные и определяемые свойства
Ранее мы показали, что с символом связаны лишь его имя – произвольное, назначенное функцией присваивания (SETQ), значение; назначенное определением функции (DEFUN) описание вычислений (лямбда-выражение). Значение и определение функции являются встроенными системными свойствами, которые управляют работой интерпретатора в различных ситуациях. Функции, используемые для чтения и изменения этих свойств (SETQ, SYMBOL-VALUE, DEFUN, FUNCTION-VALUE и другие), мы уже рассматривали ранее. Весь список свойств также является системным свойством. Работающие со свойствами символов прикладные системы могут свободно определять новые свойства.
Далее мы рассмотрим псевдофункции для чтения, изменения и удаления свойств, определяемых пользователем.
Чтение свойства
Выяснить значение свойства, связанного с символом, можно с помощью функции GET:
(GET символ свойства)
Если, например, с символом ЯГОДА-РЯБИНЫ связан определенный нами ранее список свойств, то мы получим следующие результаты:
_(get ’ягода-рябины ’вкус)
КИСЛЫЙ
_(get ’ягода-рябины ’вес)
NIL
Так как у символа ЯГОДА-РЯБИНЫ нет свойства ВЕС, то GET вернет значение NIL.
Присваивание свойства
Присваивание нового свойства или изменение значения существующего свойства в основных диалектах языка Лисп осуществляется псевдофункцией PUTPROP (put property) или PUT:
(PUTPROP символ свойство значение)
В Коммон Лиспе функции PUTPROP не существует. Свойства символов находятся в связанных с символами ячейках памяти, для присваивания значений которым используется обобщенная функция присваивания SETF. Присваивание свойства в Коммон Лиспе осуществляется через функции SETF и GET следующим образом:
(SETF (GET символ свойство) значение)
Здесь вызов GET возвращает в качестве значения ячейку памяти для данного свойства, содержимое которой обновляет вызов SETF. Присваивание будет работать и в том случае, если ранее у символа не было такого свойства. Приведем пример:
_(setf (get ’ягода-рябины ’вес) ’(2 g))
(2 G)
_(get ’ягода-рябины ’вес)
(2 G)
Побочным эффектом вызова будет изменение списка свойств символа ЯГОДА-РЯБИНЫ следующим образом:
(ВЕС (2 G) ВКУС КИСЛЫЙ ЦВЕТ КРАСНЫЙ)
Псевдофункция SETF меняет физическую структуру списка свойств. Поэтому использование других списков как части списка свойств без их предварительного копирования может привести к неожиданным ошибкам.
Удаление свойства
Удаление свойства и его значения осуществляется псевдофункцией REMPROP:
(REMPROP символ свойство)
Приведем пример:
_(remprop ’ягода-рябины ’вкус)
ВКУС
_(get ’ягода-рябины ’вкус)
NIL
Псевдофункция REMPROP возвращает в качестве значения имя удаляемого свойства. Если удаляемого свойства нет, то возвращается NIL. Свойство можно удалить, присвоив ему значение NIL. В этом случае имя свойства и значение NIL физически остаются в списке свойств.
Читать из списка свойств, создавать и обновлять в нем свойства можно не только по отдельности, но и целиком. Например, в Коммон Лиспе значением вызова
(SYMBOL-PLIST символ)
является весь список свойств:
_(symbol-plist ’ягода-рябины)
(ВЕС (2 G) ЦВЕТ КРАСНЫЙ)
Свойства глобальны
Свойства символов независимо от их значений доступны из всех контекстов до тех пор, пока они не будут явно изменены или удалены. Использование символа в качестве функции или переменной, т.е. изменение значения символа или определения функции, не влияет на другие свойства символа, и они сохраняются.
Список свойств используется во многих системных программах Лисп-систем. Наличие свойств полезно как для поддержки работы самой Лисп-системы, так и во многих типичных случаях представления данных. Использование свойств дает средства для программирования, управляемого данными, с помощью которого можно реализовать различные языки представления знаний и формализмы, такие как семантические сети, фреймы и объекты объектно-ориентированного программирования.
В некоторых системах можно использовать в качестве обобщения так называемые свободные списки свойств (disembodied property list), несвязанные с каким-либо символом.
ЛАБОРАТОРНАЯ РАБОТА №9
1. Будут ли меняться списки свойств статических и динамических переменных при смене контекста? Если да, то как?
2. Предположим, что у имени города есть свойства х и y, которые содержат координаты места нахождения города относительно некоторого начала координат. Напишите функцию (РАССТОЯНИЕ a b), вычисляющую расстояние между городами a и b, если значением функции (SQRT x) является квадратный корень числа х.
3. Предположим, что отец и мать некоторого лица, хранятся как значения соответствующих свойств у символа, обозначающего это лицо. Напишите функцию (РОДИТЕЛИ х), которая возвращает в качестве значения родителей, и предикат (СЕСТРЫ-БРАТЬЯ х1 х2), который истинен в случае, если х1 и х2 – сестры или братья, родные или с одним общим родителем.
4. Определите функцию REMPROPS, которая удаляет все свойства символа.
5. Функция GET возвращает в качестве результата NIL в том случае, если у символа нет данного свойства, либо если значением этого свойства является NIL. Следовательно, функцией GET нельзя проверить, есть ли некоторое свойство в вписке свойств. Напишите предикат
(HASPROP символ свойство)
который проверяет, обладает ли символ данным свойством.
ВВОД И ВЫВОД
- Ввод и вывод входят в диалог
- READ читает и возвращает выражение
- Программа ввода выделяет формы
- Макросы чтения изменяют синтаксис Лиспа
- Символы хранятся в списке объектов
- Пакеты или пространства имен
- PRINT переводит строку, выводит значение и пробел
- PRIN1 и PRINC выводят без перевода строки
- TERPRI переводит строку
- FORMAT выводит в соответствии с образцом
- Использование файлов
- LOAD загружает определения
Ввод и вывод входят в диалог
До сих пор в определенных нами функциях ввод данных (READ) и вывод (PRINT) осуществлялись в процессе диалога с интерпретатором. Интерпретатор читал вводимое пользователем выражение, вычислял его значение и возвращал его пользователю. Сами формы и функции не содержали ничего, связанного с вводом или выводом.
Если не использовать специальную команду ввода, то данные можно передавать лисповской функции только через параметры и свободные переменные. Соответственно, без использования вывода, результат можно получить лишь через конечное значение выражения. Часто все же возникает необходимость вводить исходные данные и выдавать сообщения и тем самым управлять и получать промежуточные результаты во время вычислений, как это делается и в других языках программирования.
Далее мы рассмотрим чтение и выдачу результатов, осуществляемые между Лисп-системой и пользователем. Эти функции, как будет видно далее, подходят и для управления файлами.
READ читает и возвращает выражение
Как только интерпретатор встречает предложение READ, вычисления приостанавливаются до тех пор, пока пользователь не введет какой-нибудь символ или целиком выражение:
_(read)
(вводимое выражение) ; выражение пользователя
(ВВОДИМОЕ ВЫРАЖЕНИЕ) ; значение функции
READ
Обратите внимание, READ никак не показывает, что он ждет ввода выражения. Программист должен сам сообщить об этом при помощи рассматриваемых позже функций вывода. READ лишь читает выражение и возвращает в качестве значения само это выражение, после чего вычисления продолжаются.
У приведенного выше вызова функции READ не было аргументов, но у этой функции есть значение, которое совпадает с введенным выражением. По своему действию READ представляет собой функцию, но у нее есть побочный эффект, состоящий именно во вводе выражения. Учитывая это, READ является не чистой функцией, в псевдофункцией.
Если прочитанное значение необходимо сохранить для дальнейшего использования, то вызов READ должен быть аргументом какой-нибудь формы, например присваивания (SETQ), которая свяжет полученное выражение:
_(setq input (read))
(+ 2 3) ; введенное выражение
(+ 2 3) ; значение
_(input)
(+ 2 3)
Форма, вызывающая интерпретатор, и функция READ совместно с другими функциями позволяют читать выражения внешние по отношению к программе. Из них можно строить новые лисповские выражения или целые программы. Построенные структуры можно вычислить, передав их непосредственно интерпретатору:
_(eval input)
_(eval (list (read) (read) (read)))
(+ 2 3)
Источник
В свое время введение алфавита явилось величайшим достижением человечества. С помощью символов, отображающих звуки речи, информация передается не только на расстояния, но и во времени. Применение компьютера позволяет форматировать каждый отдельный символ набранного текста.
Символ – минимальная единица текстовой информации. Символы – это буквы, пробелы, знаки пунктуации, цифры, специальные символы (@, *, &). Символы можно форматировать (изменять их вид).
Среди основных параметров символов можно выделить: шрифт, кегль (размер шрифта) и начертание.
Основные параметры символов
Шрифт
Для каждого исторического периода, разных стран характерен шрифт определенного рисунка. На рисунок шрифта влияет и способ его воспроизведения. Существует целая наука о создании и применении шрифтов.
Шрифт – полный набор символов определенного начертания, включая прописные (заглавные) и строчные буквы, знаки препинания, специальные символы, цифры и знаки арифметических действий.
По способу формирования рисунка символов шрифты делятся на растровые и векторные.
Изображение растрового (или bitmap в переводе с англ. означает «побитовое отображение») шрифта кодируется по точкам и без изменений отображается на экране и при распечатке. Основной недостаток растрового шрифта – заметное ухудшение качества при увеличении (масштабировании) символа, при котором изображение приобретает ступенчатые очертания, так как шрифт состоит из отдельных точек.
В векторных шрифтах рисунок символа не кодируется по точкам, а описывается совокупностью геометрических фигур (рассчитывается по определенным формулам). Поэтому векторные шрифты легко масштабировать без потери качества изображения.
В Windows применение растровых шрифтов в основном ограничено выводом на экран текстовых сообщений, а для работы с документами, как правило, используются векторные шрифты специального формата True Type (шрифты, составляемые из кривых различных порядков).
«True Type» можно перевести как «правильная печать», т.е. при использовании этих шрифтов страница документа со всеми ее атрибутами – рисунками, разметкой, стилями и т.п. выглядит на экране так же, как и на бумаге после распечатки.
Шрифты помещаются в папке Шрифты (Fonts) Windows. Файлы шрифтов True Type имеют расширение *.ttf и пометку Тт ( ).
Просмотр типа шрифта, добавление (инсталляция) и удаление шрифтов выполняются с помощью команд ПУСК ® Настройка ® Панель управления ® Шрифты. Двойной щелчок по значку шрифта в окне папки Шрифты позволяет вывести на экран образцы начертания символов шрифта и напечатать образец, щелкнув по кнопке Печать. Установка и удаление шрифтов производятся с помощью команд меню Файл из окна папки Шрифты.
Большинство шрифтов являются пропорциональными. Это означает, что и ширина отдельных символов, и расстояние между соседними символами не являются постоянными величинами и динамически меняются так, чтобы сопряжение символов было наиболее благоприятным для чтения.
Особую группу представляют так называемые моноширинные шрифты. В них каждый символ вместе с окаймляющими его интервалами имеет строго определенную ширину. Такие шрифты применяют в тех случаях, когда надо имитировать шрифт пишущей машинки, а также при вводе исходных текстов программ. Характерными представителями таких шрифтов являются шрифты семейства Courier.
Шрифты можно разделить на три большие группы: шрифты с засечками (на концах букв), рубленые (без засечек) и шрифты свободного стиля (декоративные, рукописные, рекламные шрифты – шрифты, которые трудно отнести к первым двум группам). Примеры шрифтов:
Шрифты с засечками | Рубленые шрифты | Шрифты свободного стиля |
шрифт | шрифт | шрифт |
Times New Roman | Arial Cyr | Calligraph |
Courier New Cyr | Tahoma | Wingdings adz&*J (пиктографический декоративный шрифт) |
Bookman Old Style | Microsoft Sans Serif | Symbol abg¹Ö« (содержит буквы греческого алфавита и математические знаки) |
Centure | Verdana | Comic Sans MS |
Выбор шрифта влияет на длину строки.
Считается, что шрифты с засечками легче воспринимаются глазом, видимо, поэтому их рекомендуется применять для оформления основного текста. Рубленые шрифты используют для заголовков, выделений в тексте, подписей к рисункам.
Размер шрифта (кегль)
Единицей измерения шрифта является пункт. В основу измерения типографических шрифтов положены система Дидо, в которой пункт равен 0,376 мм, и англо-американская система (или система Пика), в которой пункт равен 0,353 мм. В российской системе набора пункт равен 0,376 мм, однако некоторые компьютерные шрифты (в основном нерусифицированные) базируются на пункте, равном 0,353 мм.
Кегль – это величина площадки, на которой размещается символ (буква) с учетом свисающих, надстрочных и подстрочных элементов (диакритических элементов). Так, например, для шрифта размером 14 пт (пунктов) кегль (как раз равный 14 пт) определяется как расстояние от верхнего выносного элемента (например, для буквы «б») до нижнего выносного элемента (как в букве «р»). В этом случае понятно, что реальная высота символа «а», набранного шрифтом 14 пт будет меньше 14 пт.
Таким образом, в кегль (высоту кегля) должна укладываться прописная буква шрифта, поэтому для одного и того же кегля размер символов в зависимости от выбранного шрифта будет несколько различным, например:
Шрифт Times New Roman – кегль 18 пунктов,
Шрифт Arial Cyr – кегль 18 пунктов.
Величина стандартного шрифта печатной машинки составляет 12 пунктов. Книжный текст набирают обычно шрифтом кегля 10-11 (пунктов), в документах меньшего масштаба и более узкого применения (рефератах, пояснительных записках, рукописях статей) уместно использовать более крупный кегль – 12-14.
Начертание
Большинство шрифтов имеют четыре начертания:
· обычный (Regular, Normal);
· полужирный (Bold);
· курсив (Italic);
· полужирный курсив (Bold Italic).
Набор шрифтов определенного рисунка, но разных начертаний и размеров называют гарнитурой. Например, гарнитура шрифта Times New Roman состоит из следующих шрифтов:
· Times New Roman прямой;
· Times New Roman прямой полужирный;
· Times New Roman курсив;
· Times New Roman курсив полужирный.
Форматирование символов
В текстовом редакторе Word по умолчанию символы оформляются шрифтом Times New Roman Cyr, размер 10 пт, нормальное начертание. Для изменения установок по умолчанию выбирают команду Формат ® Шрифт, после чего все последующие символы будут набраны с учетом новых установок.
Команда Формат ® Шрифт открывает диалоговое окно Шрифт. На вкладке Шрифт можно выбрать шрифт, размер, начертание, цвет символов, варианты подчеркивания и некоторые эффекты (зачеркивание, двойное зачеркивание, с тенью, контур, приподнятое, утопленное и т.д.). На вкладке Интервал можно изменить интервал между символами (например, установить разреженный или уплотненный) или задать смещение символов (выше или ниже относительно строки). Кроме того, на этой же вкладке можно установить переключатель кернинг. Кернинг шрифта применяется для автоматического подбора интервала между символами. Установка переключателя Кернинг позволяет располагать символы ближе друг к другу, не изменяя при этом их ширины. Эффекты анимации (вкладка Анимация) используются только при подготовке электронных документов и не воспроизводятся при распечатке документов.
Чтобы изменить форматирование уже набранных символов, необходимо их выделить и только затем применить команду Формат ® Шрифт или использовать соответствующие кнопки на панели Форматирования. В этом случае изменения коснутся выделенных символов. Выделять можно как отдельный символ, так и целый текстовый блок, слово, строку, несколько строк.
Стили
Абзац – это элемент оформления любого документа. Каждый заголовок документа тоже рассматривается как отдельный абзац. Например, в меню Формат ® Абзац имеется немало различных элементов управления, и выполнять их настройку для каждого абзаца отдельно – неэффективная и утомительная задача. Она автоматизируется путем использования понятия стиль.
Стиль – это поименованный и сохраненный набор значений параметров форматирования элементов текста (абзацев и символов), который можно использовать многократно. Другими словами, стиль – это полная совокупность всех свойств абзаца.
Стили являются важными компонентами шаблона. Все шаблоны имеют встроенные стили. Стили можно применять (присваивать) к отдельному элементу документа, например абзацу, определяя этот абзац, как обычный текст или как список, или как заголовок и т.п.
Стиль – это своего рода макрокоманда, позволяющая одновременно применить к выделенной части текста все заданные для данного стиля особенности форматирования. Единожды созданный стиль остается всегда доступным в дальнейшем.
Форматировать текст с помощью стиля намного быстрее, чем изменять вручную каждый элемент форматирования, при этом гарантируется единообразие внешнего вида определенных элементов документа. Кроме того, стили являются полезным, а часто и необходимым инструментом при верстке документа, например, при создании оглавлений, структуры документа, списков иллюстраций и т.п.
Каждый стиль имеет имя. Имена некоторых стилей определяют их назначение. Например, абзацы, отформатированные стилями Заголовок 1, Заголовок 2 и т.д., автоматически включаются в оглавление, стиль Обычный определяет формат набора обычного текста.
Для работы со стилями в Word используются:
· команда меню Формат ® Стиль, открывающая диалоговое окно Стиль;
· кнопка Стиль на панели инструментов Форматирование.
Щелчок по стрелке на кнопке Стиль позволяет раскрыть список имеющихся в активном документе стилей.
Особенностью текстового редактора Microsoft Word является то, что он поддерживает два типа стилей: стили абзаца и стили символов (знаковые стили).
С помощью стилей абзаца выполняют форматирование абзаца (шрифт, отступы и выравнивания абзацев, табуляция, цвет фона, тип обрамления абзаца, язык текста, способ нумерации или маркировки абзаца и др.). Стиль есть у каждого абзаца. По умолчанию используется стиль, который называется Обычный.
С помощью стилей символов можно изменять оформление выделенных фрагментов текста внутри абзаца, например, гарнитуру и размер шрифта, его начертание и т.д., т.е. любые параметры форматирования, которые можно задать в диалоговом окне Шрифт. Не существует стиля символа, используемого по умолчанию.
Список стилей на панели инструментов содержит образцы имеющихся стилей. В раскрывающемся списке Стиль рядом с названием каждого стиля абзаца стоит спецсимвол абзаца ¶ (пи), а стили символа помечены подчеркнутой буквой а. Название каждого стиля написано шрифтом, соответствующим стилю.
Для оформления фрагмента текста выбранным стилем необходимо выполнить следующие действия:
1) выделить этот фрагмент;
2) ввести команду ФОРМАТ ® Стиль или открыть список стилей на панели Форматирование;
3) щелкнуть по названию нужного стиля в раскрывающемся списке на панели инструментов или выбрать стиль в диалоговом окне Стиль и щелкнуть по кнопке Применить.
Стили можно изменять, копировать, удалять и создавать новые (свои собственные – стили пользователя). Для выполнения этих операций в диалоговом окне Стиль имеются соответствующие кнопки Создать, Изменить, Удалить.
При этом необходимо иметь в виду следующее.
· Если к элементам документа (например, к некоторым абзацам) применен определенный стиль, а позже в этот стиль внесены изменения, то все абзацы, к которым был применен этот стиль, изменятся в соответствии с новыми параметрами стиля.
· Новые стили создаются на основе уже существующего стиля (базового) или как независимые. Изменение базового стиля ведет к изменению стилей, созданных на его основе, если изменяются общие для них параметры.
Все изменения, внесенные в существующие стили, а также вновь созданные стили могут быть сохранены не только в активном документе, но и в шаблоне, на основе которого создавался этот документ. Для сохранения в шаблоне необходимо в диалоговых окнах Создание стиля или Изменение стиля активизировать переключатель Добавить в шаблон. Тогда эти стили могут использоваться и в других документах, создаваемых на основе этого шаблона.
Посмотреть содержание стиля и характер форматирования, примененного к выделенному абзацу, можно с помощью пункта меню СПРАВКА ® Что это такое?
Начиная с Word 2000, в текстовый процессор добавлена новая возможность работы со стилями с помощью диалоговых окон Тема и Библиотека стилей.
В диалоговом окне Тема, которое выводится на экран с помощью команды меню ФОРМАТ ® Тема, можно выбрать варианты оформления страниц документа в соответствии с определенной темой.
Щелчок по кнопке Библиотека стилей в диалоговом окне Тема выводит на экран диалоговое окно Библиотека стилей, в котором можно выбрать шаблон, просмотреть стили этого шаблона и скопировать стили выбранного шаблона в текущий документ.
Объекты
Текстовый процессор Word обеспечивает возможность создания сложных документов, которые содержат не только текстовую информацию, но и рисунки, схемы, графики, формулы, таблицы, диаграммы, созданные как средствами самого текстового процессора, так и с помощью других программ и приложений. Документ Word может содержать не только графические объекты или электронные таблицы Excel, но и фото, видео- и звуковые фрагменты.
Документы, которые содержат объекты, созданные с помощью двух и более приложений, называются составными.
Как уже говорилось, документ Word включает в себя различные структурные элементы: текст, объект (рисунки, таблицы, формулы) и поля. Переходим к рассмотрению объектов.
Источник