Какие свойства относятся к символу

Какие свойства относятся к символу thumbnail

Изучив эту тему, вы узнаете:

– какие информационные объекты выделяются в текстовом документе;

– какую роль играют непечатаемые символы в текстовом документе;

– какие информационные объекты выделяются в текстовом документе;

– каковы возможности форматирования основных объектов текста: символов, абзацев и списков.

Объект «символ» и его свойства

Текст составляет основу любого текстового документа. Среда распознает отдельные элементы текста: символы, абзацы, списки. Элементарным информационным объектом текстового документа является символ. Символ — наименьшая неделимая единица текста. Символы разделяются на следующие группы: строчные буквы, прописные буквы, цифры, знаки. Кроме этого, в текстовом документе присутствуют также непечатаемые символы, по которым среда Word распознает объекты текстового документа.

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

Чтобы посмотреть текущие параметры символа или изменить их, используется команда Формат ► Шрифт. В диалоговом окне Шрифт (рис. 2.4) три вкладки. Основные параметры шрифта расположены на вкладке Шрифт.

image

Рис. 2.4. Параметры шрифта

Некоторые наиболее часто используемые свойства символа можно изменять с помощью кнопок на панели Форматирование.

Задание 2.1. Вставка символов

В текстовых документах можно встретить символы, которые не отображены на клавишах клавиатуры. Например, в тексте могут встречаться слова немецкого, шведского, финского и других языков, содержащие буквы с надстрочными или подстрочными знаками — Ы, у, G, А и др.

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

Есть символы, обозначающие денежные единицы других государств: £ (английский фунт), ¥ (японская иена), € (евро), £ (итальянская лира) и др.

Есть экономические, юридические символы: © (авторское право), ™ (торговая марка), ® (охраняемый знак) и др.

В текст можно вставить буквы греческого алфавита и множество различных математических символов’, оо (бесконечность), ° (градусная мера), и (объединение), « (приближенное равенство), о (равносильность) и пр.

Кроме символьных шрифтов, существуют также декоративные шрифты. Они содержат наборы различных графических изображений. Эти шрифты называются дингбатсы. К ним относятся шрифты Webdings, Wingdings, Wingdings 2, Wingdings 3. Создайте новый документ и наберите эти и другие символы.

Технология работы

1. Выполните команду Вставка ► Символ.

2. В открывшемся окне Символ (рис. 2.5) на вкладке Символы в поле Шрифт выберите в списке шрифтов значение (обычный текст).

3. Просмотрите таблицу символов. Сколько всего символов в ней расположено?

4. Выделите символ. Найдите в нижней части окна его название.

5. Выберите символ и нажмите кнопку Вставить.

imageДля набора математических символов в поле Шрифт можно выбрать специальный шрифт Symbol.

image

Рис. 2.5. Вставка символов

6. Выберите в поле Шрифт декоративный шрифт Webdings.

7. Просмотрите набор символов. Вставьте несколько примеров символов.

8. В поле Шрифт выберите название декоративного шрифта Wingdings.

9. Найдите в наборе и наберите знаки зодиака.

Задание 2.2. Дефис и тире,в тексте

Есть грамматические символы, которые в тексте имеют специальное назначение. Рассмотрим грамматические знаки дефис и тире.

Дефис — это символ, связывающий две части слова или два слова, которые читаются как одно, например: кто-то, темно-синий, из-зa. Дефис не отделяётся от соседних букв пробелами. Если слово с дефисом не будет полностью помещаться на одной строке, то среда текстового процессора разобьет его по дефису на две части, и тогда при чтении дефис будет восприниматься как перенос. Годы, разделенные чертой (например, 1941-1945), также плохо будут восприниматься при чтении, если окажутся на разных строках. Чтобы исключить нежелательный перенос в словах, используется специальный символ — неразрывный дефис.

Тире — это знак, разделяющий две части предложения. В отличие от дефиса, тире обязательно отделяется пробелами от соседних слов. В печатных изданиях дефис обозначается короткой горизонтальной чертой, а тире — длинной. Но на компьютерной клавиатуре есть только одна клавиша, которая может использоваться и как знак минус, и как дефис, и как тире. Поэтому для написания тире используется специальный символ — длинное тире.

Проверьте предложенный документ на правильность написания дефисов и тире.

Технология работы

1. Откройте текстовый документ по указанию преподавателя.

2. Прочитайте текст. Определите, правильно ли в нем используются символы дефис и тире.

3. Исправьте выявленные недочеты.

4. Для вставки символов «длинное тире» и «неразрывный дефис» выполните команду Вставка ► Символ и найдите нужные символы на вкладке Специальные.

Задание 2.3. Форматирование символов

Чтобы изменить свойства символов в некотором фрагменте текста, надо выделить этот фрагмент текста и установить для него требуемые параметры, используя диалоговое окно Шрифт или кнопки на панели инструментов.

Откройте файл с текстом по указанию учителя. Для различных фрагментов текста установите следующие значения параметров символов: 

1. Первый фрагмент: шрифт Courier New, полужирный, 16 пт, красный, все прописные, разреженный на 2 пт.

2. Второй фрагмент: шрифт Tahoma, курсив, 10 пт, зачеркнутый, масштаб 150 %. Чем отличается действие параметров Масштаб и Интервал для символа?

3. Наберите слово КВАЛИФИКАЦИЯ. Установите смещение отдельных символов вверх и вниз.

4. Третий фрагмент: шрифт Arial, 10 пт, скрытый. Что стало с текстом?

5. Включите режим отображения непечатаемых символов. Для этого нажмите кнопку Непечатаемые знаки на панели Стандартная. Как теперь отображается третий фрагмент? Какие непечатаемые символы вы увидели в документе?

6. Выделите одновременно пятый, шестой и седьмой фрагменты, расположенные в разных местах документа. Для этого:

– выделите пятый фрагмент;

– удерживая на клавиатуре клавишу Ctrl, выделите по очереди шестой и седьмой фрагменты.

7. Для пятого, шестого и седьмого фрагментов установите следующие свойства: шрифт Comic Sans MS, 20 пт, зеленый, контурный, разреженный на 2 пт.

Объект «абзац» и его свойства

Другим важным элементом текста является абзац. Слово «абзац» имеет несколько толкований. В литературе абзац определяется как часть текста, имеющая законченный смысл. Абзацем также называют фрагмент текста, имеющий отступ в начале строки, или фрагмент текста, расположенный между двумя такими отступами.

Компьютерный текст не всегда имеет отступ в первой строке, и тем более компьютерная среда не умеет распознавать смысл текста, поэтому в среде Word под абзацем понимается информационный объект, обозначенный специальным символом. 

Абзац — фрагмент текста, начинающийся с новой строки и заканчивающийся непечатаемым символом (конец абзаца). Этот символ появляется при нажатии клавиши Enter.

Поскольку абзац в любом случае состоит из символов, то разным фрагментам абзаца могут быть установлены разные значения параметров шрифта. Однако, абзац, как самостоятельный объект текста» имеет собственные свойства, которые применяются к абзацу в целом, а не к отдельным символам или фрагментам абзаца. Просмотреть все свойства абзаца и изменить их можно с помощью команды Формат ► Абзац.

Окно Абзац (рис. 2.6) имеет две вкладки. На вкладке Отступы и интервалы расположены наиболее часто используемые параметры абзаца. Они разделены на три группы: Общие, Отступ и Интервал.

image

Рис. 2.6. Параметры абзаца

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

Задание 2.4. Форматирование абзацев

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

1. Откройте документ по указанию учителя.

2. Включите режим отображения непечатаемых символов — кнопка на панели инструментов Стандартная.

3. Найдите символы «конец абзаца».

4. Щелкните внутри первого абзаца. Установите параметры абзаца: выравнивание по ширине, отступ слева 2 см, выступ 0,75 см, интервал перед абзацем — 6 пт, междустрочный интервал — полуторный.

5. Выделите полностью три соседних абзаца (2-й, 3-й, 4-й). Установите параметры символов и абзацев: шрифт Arial, 10 пт, отступ слева 5 см, справа — 2 см, первая строка — отступ 1 см, интервал перед абзацем 6 пт, после — 6 пт. Отключите режим отображения непечатаемых символов. Что стало с текстом? Включите режим отображения непечатаемых символов.

6. В пятом абзаце вставьте символ «разрыв строки» в конце каждой строки (Вставка ► Разрыв ► Новую строку), а затем — в середине каждой строки. Щелкните внутри абзаца. Установите параметры абзаца: выравнивание по ширине, отступ слева 1 см, справа — 3 см, первая строка — отступ 1 см. Посмотрите результаты. Измените отступы: слева и справа — по 5 см. Измените размер шрифта так, чтобы текст до разрыва строки не помещался на одной строке. Примените разные виды выравнивания текста.

Источник

В Лиспе с символом можно связать именованные свойства (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 символ свойство)

который проверяет, обладает ли символ данным свойством.

ВВОД И ВЫВОД

  1. Ввод и вывод входят в диалог
  2. READ читает и возвращает выражение
  3. Программа ввода выделяет формы
  4. Макросы чтения изменяют синтаксис Лиспа
  5. Символы хранятся в списке объектов
  6. Пакеты или пространства имен
  7. PRINT переводит строку, выводит значение и пробел
  8. PRIN1 и PRINC выводят без перевода строки
  9. TERPRI переводит строку
  10. FORMAT выводит в соответствии с образцом
  11. Использование файлов
  12. 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)



Источник

Лабораторная работа 1.

Тема: Ознакомительная работа в среде Lisp. Базовые функции Лиспа. Символы, свойства символов. Математические и логические функции

Цель:Ознакомиться со средой Lisp. Изучить базовые функции Лиспа, символы и их свойства, средства для работы с числами.

1. Основные положения программирования на Лиспе.

2. Загрузка системы, системный редактор.

3. Функции списков.

4. Символы, свойства символов.

5. Математические и логические функции.

6. Ход работы.

7. Контрольные вопросы.

Теоретическое введение.

Основные положения программирования на Лиспе

· Лисп ориентирован на обработку нечисловых задач. Он основан на алгебре списочных структур, лямбда-исчислении и теории рекурсий.

· Язык имеет функциональную направленность, т.е. любое предложение заключенное в скобки, введенное вне редактора считается функцией и выполняется сразу после нажатия «ENTER».

· Чтобы предотвратить вычисление значения выражения, нужно перед этим выражением поставить апостроф «’». Апостроф перед выражением – сокращение функции Лиспа QUOTE.

· В Лиспе формы представления программы и обрабатываемых ею данных одинаковы. И то и другое представляется списочной структурой, имеющей одинаковую форму.

· Типы данных не связаны с именами объектов данных, а сопровождают сами объекты. Переменные могут в различные моменты времени представлять различные объекты.

· Основные типы данных языка – атомы и списки.

Атомы это символы и числа.

Список упорядоченная последовательность, элементами которой являются атомы либо списки. Списки заключаются в круглые скобки, элементы списка разделяются пробелами. Несколько пробелов между символами эквивалентны одному пробелу. Первый элемент списка называется «головой», а остаток, т.е. список без первого элемента, называется «хвостом». Список, в котором нет ни одного элемента, называется пустым и обозначается «( )» либо NIL.

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

· Символы Т и NIL имеют в Лиспе специальное назначение: Т – обозначает логическое значение истина, a NIL – логическое значение ложь.

· При генерации или считывании Лиспом нового символа, за его величину принимается он сам. Такая ссылка символа на себя называется автоссылкой.

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

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

· Определения функций могут храниться в файлах и загружаться используя функцию RDS

(RDS ‘<имя файла>)

· Эта функция считывает файл выражений и выполняет эти выражения. <Имя файла> – это строковая константа, которая представляет собой имя файла без расширения (подразумевается расширение “lsp”).

· Вы можете сгенерировать ваши собственные исходные файлы с использованием либо редактора LISP, либо редактора внешних текстов, соответствующего ОС вашей ЭВМ и генерирующего стандартные текстовые файлы ASCII.

Загрузка системы, системный редактор

В качестве редактора можно использовать онлайн-редактор, который можно запустить по адресу:

https://www.tutorialspoint.com/execute_lisp_online.php.

Данная среда включает:

– текстовый редактор;

– исполнитель кода.

Функции списков

· Функция CAR возвращает в качестве значения первый элемент списка:

(CAR список) → S- выражение (атом либо список).

· Функция CDR – возвращает в качестве значения хвостовую часть списка, т. е. список, получаемый из исходного списка после удаления из него головного элемента:

(CDR список) → список

Примеры:

(write (car ‘(a b c d e f)))

(write (cdr ‘(a b c d e f)))

(write (cons ‘a ‘(b c)))

(write (list ‘a ‘(b c) ‘(e f)))

(write (append ‘(b c) ‘(e f) ‘(p q) ‘() ‘(g)))

(write (last ‘(a b c d (e f))))

(write (reverse ‘(a b c d (e f))))

Результат:

A

(B C D E F)

(A B C)

(A (B C) (E F))

(B C E F P Q G)

((E F))

((E F) D C B A)

· Объединение команд

Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, в Лиспе для этого используется более короткая запись. Желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции:

(C…R список)

cadadr = car cdr car cdr.

Вместо многоточия записывается нужная комбинация из букв А и D (для CAR и CDR соответственно). В один вызов можно объединять не более четырех функций CAR и CDR.

(CADAR х) = (CAR (CDR (CAR х)))

(CDDAR ‘((a bed) е)) = (с d)

(CDDR ‘(k 1 m)) = (m)

(cadadr ‘(a (c d) (e f g))) = d

· Функция создания CONS.

· Функция CONSстроит новый список из переданных ей в качестве аргументов головы и хвоста.

(CONS голова хвост)

Для того чтобы можно было включить первый элемент функции CONS в качестве первого элемента значения второго аргумента этой функции, второй аргумент должен быть списком. Значением функции CONS всегда будет список:

(CONS s-выражение список) → список

(write (cons ‘a ‘(b c)))

(write (cons ‘ab ‘cd))

(write (cons NIL ‘(a b c) ))

(write (cons ‘(a b c) NIL))

(write (cons 1 nil))

(write (cons 1 (cons 2 nil)))

(write (cons 1 (cons 2 (cons 3 nil))))

(write (cons ‘a (cons ‘b (cons ‘c nil))))

(write ( car (cons ‘a (cons ‘b (cons ‘c nil)))))

(write ( cdr (cons ‘a (cons ‘b (cons ‘c nil)))))

Результат:

(A B C)(AB . CD)(NIL A B C)((A B C))(1)(1 2)(1 2 3)(A B C)A(B C)

· Функция LIST – создает список из элементов. Она возвращает в качестве своего значения список из значений аргументов. Количество аргументов произвольно.

Функция Описание
car Принимает список в качестве аргумента и возвращает его первый элемент
cdr Принимает список в качестве аргумента и возвращает список без первого элемента
cons Принимает два аргумента, элемент и список, и возвращает список с элементом, вставленным в первое место
list Принимает любое количество аргументов и возвращает список с аргументами в качестве элементов списка.
append Объединяет два или более списка в один.
last Принимает список и возвращает список, содержащий последний элемент.
memberПринимает два аргумента, вторым из которых должен быть список, если первый аргумент является членом второго аргумента, а затем возвращает остаток списка, начинающийся с первого аргумента.
reverseПринимает список и возвращает список с верхними элементами в обратном порядке.

Примеры

(write (list 1 2))(write (list ‘a ‘b))(write (list 1 nil))(write (list 1 2 3))(write (list ‘a ‘b ‘c))(write (list 3 4 ‘a (car ‘(b . c)) (* 4 -2)))(write (list (list ‘a ‘b) (list ‘c ‘d ‘e)))

Результат

(1 2)(A B)(1 NIL)(1 2 3)(A B C)(3 4 A B -8)((A B) (C D E))

· Предикаты ATOM, ЕО, EOL, EQUAL.

Предикат – функция, которая определяет, обладает ли аргумент определенным свойством, и возвращает в качестве значения NIL или Т.

· Предикат АТОМ – проверяет, является ли аргумент атомом:

(ATOM s – выражение)

Значением вызова АТОМ будет Т, если аргументом является атом, и NIL – в противном случае.

(АТОМ ‘а) ® Т(АТОМ ‘(а b с)) ® NIL(АТОМ NIL) ® Т(АТОМ ‘(NIL)) ® NIL

· Предикат ЕОсравнивает два символа и возвращает значение Т, если они идентичны, в противном случае – NIL. С помощью EQ сравнивают только символы или константы Т и NIL.

(EQ ‘a ‘b) ® NIL(EQ ‘a (CAR ‘(a b с))) ® T (EQ NIL 0) ® T

· Предикат EOLработает так же как и EQ, но дополнительно позволяет сравнивать однотипные числа.

(EQL 2 2) ® Т(EQL 2.0 2.0) ® Т (EQL 2 2.0) ® NIL

Для сравнения чисел различных типов используют предикат «=». Значением предиката «=» является Т в случае равенства чисел независимо от их типов и внешнего вида записи.

(= 2 2.0) ® Т

· Предикат EQUALпроверяет идентичность записей. Он работает как EQL, но дополнительно проверяет одинаковость двух списков. Если внешняя структура двух лнсповскнх объектов одинакова, то результатом EQUAL будет Т.

(EQUAL ‘а ‘а) ® Т (EQUAL ‘(а b с) ‘(а b с)) ® Т (EQUAL ‘(а b с) ‘(CONS ‘а ‘(Ь с))) ® Т (EQUAL 1.0 1) ® NIL

· Функция NULLпроверяет на пустой список.

(NULL ‘())® Т

Символы, свойства символов.

· Функции присваивания: SET, SETO, SETF.

· Функция SETприсваивает символу или связывает с ним некоторое значение. Причем она вычисляет оба своих аргумента. Установленная связь действительна до конца работы, если этому имени не будет присвоено новое значение функцией SET.

(SET ‘a ‘(b с d)) результат (b с d)a результат (b с d)(SET (CAR a) (CDR (e f g)) результат (f g) a результат (b с d)(CAR a) результат b b результат (f g)

· Функция SETQсвязывает имя, не вычисляя его. Эта функция отличается от SET тем, что вычисляет только второй аргумент.

(SETQ d ‘(l m n)) = (l m n)

· Функция SETF– обобщенная функция присваивания. SETF используется для занесения значения в ячейку памяти.

(SETF ячейка памяти – значение)

· Свойства символа.

В Лиспе с символом можно связать именованные свойства. Свойства символа записываются в хранимый вместе с символом список свойств. Свойство имеет имя и значение. Список свойств может быть пуст. Его можно изменять или удалять без ограничений.

(имя1 знач1 имя2 знач2 … имяХ значМ)

Пусть имя студент имеет следующий список свойств:

(имя Иван отчество Иванович фамилия Иванов)

· Функция GETвозвращает значение свойства, связанного с символом.

(GET символ свойство)

При отсутствии свойства функция GET возвращает NIL в качестве ответа.

· Присваивание и удаление свойств.

Для присваивания символу свойств в MnLisp / Common Lisp отдельной функции нет. Для этого используются уже известные нам функции:

(SETF (GET символ свойство) значение)

Удаление свойства и его значения осуществляется псевдофункцией REMPROP.

Эта функция возвращает в качестве значения имя удаляемого свойства. Если удаляемого свойства нет, то возвращается NIL.

(REMPROP символ свойство)

Для просмотра всего списка свойств используют функцию SYMBOL- PLIST. Значением функции является весь список свойств.

(SYMBOL-PLIST ‘СИМВОЛ)

(SYMBOL-PLIST ‘студент) результат (имя Иван отчество Иванович фамилия Иванов)

Программа:

(write (setf (get ‘books’title) ‘(Gone with the Wind)))(write (setf (get ‘books ‘author) ‘(Margaret Michel)))(write (setf (get ‘books ‘publisher) ‘(Warner Books)))

Результат:

(GONE WITH THE WIND)(MARGARET MICHEL)(WARNER BOOKS)

Программа:

(setq s1 (cons ‘(a b) NIL))(setq s2 (cons ‘(a b) NIL))(setf (get ‘s1 ‘a) 10) (setf (get ‘s1 ‘b) 20)(setq spisok (list s1 s2))(write (symbol-plist ‘s1))

Программа:

(setf (get ‘books ‘title) ‘(Gone with the Wind))(setf (get ‘books ‘author) ‘(Margaret Micheal))(setf (get ‘books ‘publisher) ‘(Warner Books))(write (get ‘books ‘title))(write (get ‘books ‘author))(write (get ‘books ‘publisher))

Результат:

(GONE WITH THE WIND)(MARGARET MICHEAL)(WARNER BOOKS)

Программа:

(setf (get ‘annie ‘age) 43)(setf (get ‘annie ‘job) ‘accountant)(setf (get ‘annie ‘sex) ‘female)(setf (get ‘annie ‘children) 3)(write (symbol-plist ‘annie))(remprop ‘annie ‘age)(write (symbol-plist ‘annie))

Результат:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)

Свойства символов независимо от их значений доступны из всех контекстов пока не будут явно изменены или удалены. Изменение значения символа не влияет на другие свойства. Свойства символа передаются другому символу с помощью функции SETQ.

Рекомендуемые страницы:

Воспользуйтесь поиском по сайту:

Источник