![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
A ; два перевода строки (terpri и print)Содержание книги
Поиск на нашем сайте
B C C; значение Функцию PRINT можно определить с помощью TERPRI, PRIN1 и PRINC следующим образом:
_(defun print1 (x) (prog2 (terpri) (prin1 x) (princ “ ”)) PRINT1 FORMAT выводит в соответствии с образцом Печать выражений в сложной форме с помощью функций PRINx и TERPRI требует либо предварительного построения специальных структур, либо требует последовательного использования большого числа функций вывода. Программирование, таким образом, усложняется, и поэтому не сразу можно понять, что же на самом деле печатается. Для решения этих проблем в Коммон Лиспе есть функция FORMAT, при помощи которой можно, используя параметры, гибко задать формат печати. О множестве возможностей и, с другой стороны, о сложности функции FORMAT свидетельствует то, что в спецификации Коммон Лиспа ей посвящено несколько десятков страниц. Мы рассмотрим лишь самые существенные с точки зрения практического программирования форматы вывода. Форма вызова функции FORMAT следующая:
(FORMAT поток образец &REST аргументы)
Первый аргумент формы поток задает файл или устройство, куда осуществляется вывод. Потоку присваивается значение Т, если вывод осуществляется на экран. При выводе в файл потоком является поток вывода, представляющий этот файл. Вторым аргументом образец является ограниченная с обеих сторон кавычками управляющая строка, которая может содержать управляющие коды. Они опознаются по знаку ~ (тильда) перед ними. Остальные аргументы формы ставятся в соответствие управляющим кодам строки. Если управляющие коды и соответствующие им аргументы не используются, то FORMAT выводит строку так же, как функция PRINC, и возвращает в качестве значения NIL.
_(format t “Это печатается!”) Это печатается! NIL; значение Задав NIL значением параметра ПОТОК, получим в качестве результата функции строку, построенную с помощью управляющих кодов и аргументов. У такой формы есть лишь значение, и нет побочного эффекта, связанного с выводом. Гибкость функции FORMAT основана на использовании управляющих кодов. Они выводят в порядке их появления слева направо каждый очередной отформатированный аргумент или осуществляют какие-нибудь действия, связанные с выводом. Наиболее важными управляющими кодами и их назначением являются:
КОД НАЗНАЧЕНИЕ ~% Переводит строку ~S Выводит функцией PRIN1 значение очередного аргумента ~A Выводит функцией PRINC значение очередного Аргумента ~nT Начинает вывод с колонки n. Если уже ее достигли, То выводится пробел ~~ Выводит сам знак тильды. Приведем пример:
_(format t “На~%отдельные~%строки~%”) На; печать Отдельные; печать Строки; печать NIL; результат _(format nil “Ответ - ~S” (+ 2 3)); печати нет “Ответ - 5”; значением является строка _(setq x 2) _(setq y 3) _(format t “~S плюс ~S будет ~S~%” x y (+ x y)) Плюс 3 будет 5 NIL _(format t “Знак тильды: ~~”) Знак тильды: ~ NIL _(defun таблица (а-список) (format t “~%Свойство~15Tзначение~%”) (do ((пары а-список (rest пары))) ((null пары) (terpri)) (format t “~%~A~15T~A” (caar пары) (cadarпары)))) ТАБЛИЦА _(таблица ’((имя “Zippy”) (кличка “Pinhead”) (язык английский))) Свойство Значение ИМЯ Zippy КЛИЧКА Pinhead ЯЗЫК АНГЛИЙСКИЙ Различные Лисп-системы дополнительно к основным функциям ввода и вывода содержат целый набор различных встроенных функций, макросов и других средств, при помощи которых можно задавать более сложные виды печати, например шрифт. Отдельный мир образуют интеллектуальные и программируемые растровые дисплеи Лисп-машин и более развитых рабочих мест с битовыми картами и средствами указания (мышь, сенсорно-чувствительный дисплей и другие). Они позволяют при вводе и выводе использовать окна и графические образы (icons). Наличие таких средств зависит от возможностей системных и внешних устройств и варьируется от системы к системе.
Использование файлов Ввод и вывод во время работы с Лиспом в основном осуществляется через дисплей и клавиатуру. Файлы используются, как правило, лишь для хранения программ в промежутке между сеансами. Однако иногда возникает необходимость работы с файлами из программы. Основные средства работы с файлами нужно знать еще и потому, что во многих системах дисплей и каждое окно в системах с окнами считаются файлами. В Коммон Лиспе ввод и вывод осуществляются независимо от конфигурации внешних устройств через потоки. Потоки представляют собой специальные резервуары данных, из которых можно читать (поток ввода) или в которые можно писать (поток вывода) знаки или двоичные данные. У системы есть несколько стандартных потоков, которые являются значениями глобальных переменных. Наиболее важные из них
*STANDARD-INPUT* *STANDARD-OUTPUT* Эти системные переменные определяют для функций ввода (READ и др.) и соответственно для функций вывода (PRINx, TERPRI и др.) файлы по умолчанию, которыми в начале сеанса являются дисплей или терминал пользователя. В этом случае нет необходимости в начальном объявлении потока ввода для функции READ или потока вывода для функций вывода (исключением является функция FORMAT). Если мы хотим обмениваться данными с каким-нибудь новым файлом, то сначала его нужно открыть (open) в зависимости от его использования для чтения или для записи. У директивы OPEN может быть много ключевых параметров. Самым важным из них является:DIRECTION:
(OPEN файл &KEY:DIRECTION) Значением параметра могут быть следующие ключи:
ПАРАМЕТР ЗНАЧЕНИЕ :INPUT Открыть поток для ввода :OUTPUT Открыть поток для вывода :IO Открыть двусторонний поток Ключи в вызове функции не требуют апострофа. Например, следующий вызов открывает поток для вывода файла ПРОБА.LSP:
_(open ’проба.lsp:direction:output) ... Потоковый объект, получаемый в результате вызова OPEN, можно для следующего использования присвоить какой-нибудь переменной:
_(setq поток (open ’проба.lsp:direction:io)) ... Этот вызов присваивает переменной ПОТОК двусторонний поток, связанный с файлом ПРОБА.LSP. Поток можно при помощи присваивания сделать и системным потоком по умолчанию:
_(setq *standard-input* поток) ... После этого действие функции READ было бы перенаправлено на файл ПРОБА.LSP, а не на пользовательское устройство ввода. Наряду с файлами по умолчанию, другим способом задать источник для ввода или получатель для вывода является передача желаемого потока в качестве параметра вызова. Для функций READ, PRINx и TERPRI это осуществляется через необязательный параметр. Более подробным описанием параметров этих функций будет:
(READ x &OPTIONAL поток) (PRINT x &OPTIONAL поток) (PRIN1 x &OPTIONAL поток) (PRINC x &OPTIONAL поток) (TERPRI x &OPTIONAL поток) Таким образом, все ранее рассмотренные функции ввода и вывода можно использовать и с указанием файла, задавая соответствующий файлу поток в качестве необязательного параметра. Например, следующий вызов PRIN1 записывает выражение в файл ПРОБА.LSP, и вызов READ читает это выражение:
_(prin1 ’(в файл ПРОБА.LSP) поток) (В ФАЙЛ ПРОБА.LSP) _(setq x (read поток)) (В ФАЙЛ ПРОБА.LSP) _x (В ФАЙЛ ПРОБА.LSP) Чтобы записанные в файл данные сохранились, надо не забыть закрыть файл директивой CLOSE:
(CLOSE поток) Вообще-то работа с файлами более удобна через форму WITH-OPEN-FILE:
(WITH-OPEN-FILE (поток файл режим1 … режимN) форма1 … формаM) Вызов WITH-OPEN-FILE позволяет открыть определенный в пределах формы поток, который автоматически создается в самом начале вычислений и закрывается после их завершения. Такие характеристики потока, как его направление, задаются через:DIRECTION и другие ключи так же, как и в директиве OPEN. Формы формаi вызова WITH-OPEN-FILE вычисляются последовательно, и значение последней из них возвращается в качестве результата вызова (неявный progn). Например, приведенный ниже вызов открывает поток с именем ПОТОК1 на файл ПРОБА.LSP, читает оттуда записанное нами ранее выражение и закрывает файл. Результатом будет прочитанное выражение.
_(with-open-file (поток1 ’проба.lsp:direction:input) (read поток1)) (В ФАЙЛ ПРОБА.LSP) LOAD загружает определения На практике написание программ осуществляется записью в файл определений функций, данных и других объектов с помощью имеющегося в программном окружении редактора. После этого для проверки определений вызывают интерпретатор Лиспа, который может прочитать записанные в файл выражения директивой LOAD:
(LOAD файл) Читаемые выражения вычисляются так, как будто бы они введены пользователем. После загрузки можно использовать функции, значения переменных, значения свойств и другие определения. Стандарт Коммон Лиспа содержит кроме описанных выше средств большое количество возможностей для работы с файлами, в том числе переименование и удаление файлов. Имена файлов можно задавать либо именем относительно используемой системы (name-string), либо не зависящими от устройств логическим именем (pathname).
ЛАБОРАТОРНАЯ РАБОТА №10
1. Напишите функцию ЧИТАЙ-ФРАЗУ, которая вводит фразу на естественном языке, заканчивающуюся вопросительным или восклицательным знаком, и преобразует ее в список:
_(читай-фразу); вызов куда дует ветер?; ввод (КУДА ДУЕТ ВЕТЕР?); результат
2. Запрограммируйте функцию ЧИТАЙ, которая вводит вызов функции в виде
fn(a1 a2.. aN) и возвращает значение вызова:
_(читай) +(2 3) _(читай) cons (’a ’(b c)) (a b c)
3. Определите функцию (ЧЕРТА n), печатающую n раз звездочку (*).
4. Используя функцию ЧЕРТА, напишите функцию (ПРЯМОУГОЛЬНИК n m) заполняющую всю область n´m звездочками.
5. Определите функцию, которая спрашивает у пользователя имя и вежливо ему отвечает:
_(начали) Введите Ваше имя: Иван Прекрасно, ИВАН, программа работает!
СОДЕРЖАНИЕ ИСТОРИЯ ЛИСПА ___________________________________________________ 4
ЛИСП – ЯЗЫК ПРОГРАММИРОВАНИЯ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА __________ 7
СИМВОЛЫ И СПИСКИ ________________________________________________ 13 ЛАБОРАТОРНАЯ РАБОТА №1 __________________________ 17
ПОНЯТИЕ ФУНКЦИИ _________________________________________________ 18 ЛАБОРАТОРНАЯ РАБОТА №2 __________________________ 23
БАЗОВЫЕ ФУНКЦИИ _________________________________________________ 23 ЛАБОРАТОРНАЯ РАБОТА №3 __________________________ 33
ИМЯ И ЗНАЧЕНИЕ СИМВОЛА __________________________________________ 34 ЛАБОРАТОРНАЯ РАБОТА №4 __________________________ 39 ОПРЕДЕЛЕНИЕ ФУНКЦИИ _____________________________________________ 39 ЛАБОРАТОРНАЯ РАБОТА №5 ____________________________ 47
ПЕРЕДАЧА ПАРАМЕТРОВ И ОБЛАСТЬ ИХ ДЕЙСТВИЯ _______________________ 48 ЛАБОРАТОРНАЯ РАБОТА №6 ____________________________ 52
ВЫЧИСЛЕНИЕ В ЛИСПЕ ______________________________________________ 52 ЛАБОРАТОРНАЯ РАБОТА №7 ____________________________ 65 ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ СПИСКОВ ________________________________ 66 ЛАБОРАТОРНАЯ РАБОТА №8 ____________________________ 79
СВОЙСТВА СИМВОЛА ________________________________________________ 79 ЛАБОРАТОРНАЯ РАБОТА №9 ____________________________ 82
ВВОД И ВЫВОД ____________________________________________________ 83 ЛАБОРАТОРНАЯ РАБОТА №10 ___________________________ 93 СПИСОК ЛИТЕРАТУРЫ
1. Цикритзис Д., Лоховски Ф. Модели данных. – М.: Финансы и статистика, 1996. 2. Э. Хювенен, Й. Сеппянен. Мир Лиспа. Методы и системы программирования. В 2-х томах. – М.: Мир, 1990. 3. А. Тей, П. Грибомон, Ж. Луи др.. Под ред. Г.П. Гаврилова. Логический поход к искусственному интеллекту. – М.: Мир, 1990.
Редактор ______________ Лицензия N __________ от_________. Подписано в печать__________. Формат__________. Бумага тип. N __. Печать офсетная. Усл. печ. л. ________. Уч.-изд. л. ________. Тираж ______ экз. Зак. N____. Редакционно-издательский отдел ДонНУ
|
||||||||
Последнее изменение этой страницы: 2016-09-05; просмотров: 430; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.220.148 (0.009 с.) |