ДНЕПРОПЕТРОВСКАЯ ОБЛАСТНАЯ АДМИНИСТРАЦИЯ
ИНСТИТУТ ПРЕДПРИНИМАТЕЛЬСТВА «СТРАТЕГИЯ»
КАФЕДРА ЕКНОМИЧЕСКОЙ КИБЕРНЕТИКИ И
ПРОГРАМНОГО ОБЕСПЕЧЕНИЯ
ДОКДАД
ПО ДИСЦИПЛИНЕ:
«ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ»
НА ТЕМУ:
«ФОРМАТИРОВАННЫЙ ВВОД »
Выполнил:
студент группы П-01-51
Руденко Владимир
2003г.
г. Желтые Воды
Если не использовать специальную команду ввода, то данные можно передавать лисповской функции только через параметры и свободные переменные. Соответственно, без использования выводы, результат можно получить лишь через конечное значение выражения. Часто все же возникает необходимость вводить исходные данные и выдавать сообщения т тем и самым управлять и получать промежуточные результаты во время вычислений, как это делается и в других языках программирования.
Лисповская функция чтения READ отличается от ввода в других языках программирования тем, что она обрабатывает выражение целиком, а не отдельные элементы данных. Вызов этой функции осуществляется пользователем (немного упрощенно) в виде:
(READ)
Как только интерпретатор встречает предложение READ, вычисления приостанавливаются до тех пор, пока пользователь не введет какой-нибудь символ или целиком выражение.
READ никак не показывает, что оно ждет ввода выражения. Программист должен сам сообщить об этом при помощи функций ввода. READ лишь читает выражение и возвращает в качестве значения само это выражение, после чего вычисления продолжаются.
По своему действию READ представляет собой функцию, но у нее есть побочный эффект, состоящий именно во вводе выражения. Учитывая это, READ является не чистой функцией, а псевдо функцией.
Если прочитанное значение необходимо сохранить для дальнейшего использования, то вызов READ должен быть аргументом какой-нибудь формы, например присваивания (SETQ), которая свяжет полученное выражение:
_(setq input (read))
(+ 2 3); введенное выражение
(+ 2 3); значение
_input
(+ 2 3)
Форма, вызывающая интерпретатор, и функция READ совместно с другими функциями позволяет читать выражения внешние по отношению к программе. Из них можно строить новые лисповские выражения или целые программы. Построенные структуры можно вычислить, передав их непосредственно интерпретатору:
_(evalinput)
5
_(eval (list (read) (read) (read)))
+ 2 3
5
Функция READ основана на работающей на системном уровне процедуре чтения (Lisp reader). Она читает выражение, образуемое последовательностью знаков, поступающих из файла или иного источника. Внешние устройства становятся доступными из Лисп – системы через объекты, называемые потоками. На логическом уровне потоки независимо от характера внешнего устройства являются последовательностью читаемых или записываемых знаков или битов. Для ввода и вывода, как и для двустороннего обмена, существуют свои типы потоков и специальные операции.
Процедура чтения содержит анализатор, проверяющий знаки в читаемой им последовательности. Чтение обычного алфавитно-цифрового знака никаких особых действий не требует, в то время как чтение специального знака, такого как открывающая или закрывающая скобка, пробел, разделяющий элементы. Или точка, приводит к специальным действиям. Соответствие между различными знаками и действиями определяется так называемой таблицей чтения, которая задает лисповские функции для знаков. Знаки, вызывающие специальные действия, называют макрознаками или макросами чтения, поскольку их чтение требует более сложных действий. Таблица чтения доступна программисту, и он может сам определять новые интерпретации знаков и, таким образом, расширять или изменять синтаксис Лиспа.
Действие макроса – чтения определяется в Лиспе при помощи обыкновенной функции. Она читает и возвращает в качестве значения форму, для построения которой она в свою очередь может предварительно использовать макросы. Определим для примера макрос чтения %, действующий так же, как апостроф. Действие блокировки вычисления пользователь может определить в виде функции, которая рекурсивно читает очередное выражение и возвращает его в составе формы QUOTE:
_(defun f () (stream char)
(list ‘quote (read)))
Функция, определяющая макрос чтения, имеет в Лиспе два аргумента, первый из которых описывает отток чтения, а значением второго будет сам макрознак. В данном примере мы не использовали параметры.
Запись символов и определенных для них макроинтерпретаций в таблицу чтения осуществляется командой:
(SET-MACRO-CHARACTER знак функция)
_(set-macro-character
#% ‘f)
Здесь запись #% обозначает знак процента (%) как объект с типом данных знак.
После этих определений можно знак процента использовать так же, как апостроф:
_%(a %b c)
(A (QUOTE B) C)
Таблиц чтения может быть несколько, но процедура чтения использует в каждый момент времени лишь одну таблицу. Текущая таблица сохраняется как значение системной переменной *READTABLE*.
Встроенными макросами чтения в Коммон Лиспе являются:
( ; начинает ввод списка или точечной пары
) ; заканчивает ввод списка или точечной пары
' ; возвращает очередное выражение в виде вызова QUOTE
; ; символы до конца строки считаются комментарием
; выделение одиночного специального знака
| ; выделение нескольких специальных знаков
; |…|
“ ;строка: “…”
Макрознаки нельзя использовать в составе символов наподобие обычных знаков, поскольку процедура чтения проинтерпретирует их в соответствии с таблицей как макросы чтения. Для включения таких знаков в состав имен нужно использовать специальные выделяющие знаки: |, , которые блокируют макрообработку знаков.
ПРИМЕРЫ
Чтение строки
Вводим предложение, заканчивающееся вопросительным или восклицательным знаком, и преобразуем его в список:
(defun readf_ ()
(let ((word (read)))
(cond ((eq word ‘?) ‘(?))
(t (cons word (readf_))))))
Ввод в режиме EVALQUOTE
Функция READ, которая вводит вызов функции в виде: fn(a1 a2 … an) и возвращает значение вызова
(defun readq_ ()
(eval (cons (read) (read))))
Другие работы по теме:
Дорожные испытания автомобилей
Цель лабораторной работы: определить динамические качества автомобиля при разгоне и затухающем движении, топливную экономичность при различных скоростях движения. Дорожные испытания автомобиля с целью определения эффективности тормозного управления.
Системы управления электронными документами
А.Чередов, Cognitive Technologies Тезисы доклада Для эффективного доступа к информации и ее использования в современном офисе все чаще используют Системы Управления Электронными Документам (СУЭД). На их базе решаются задачи электронного делопроизводства и документооборота. СУЭД опираются на технологии электронного архивирования документов включающие ввод, создание, хранение и поиск информации в Электронном архиве документов.
объект исследования или разработки
Санкт-Петербурга прикладных программ учета музейных ценностей. Исследована возможность перехода от программ, реализующих идеологию «файл-сервер», к программам, построенным по принципу «клиент-сервер». Отработан алгоритм конвертации записей бд субд foxPro в формат Mysql
Экзамен 9 семестр Всего- 300 Требования стандарта по дисциплине
«Требованиям к обязательному минимуму содержания и уровня подготовки выпускника высшей школы», утв. Госкомитетом РФ по высшему образованию от 27 марта 2000 г по циклу «Дисциплины специализации» од. С. Оо: Автоматика и робототехника, согласно которым специалист после изучения дисциплины должен
Военное положение в Польше 1981-1983
Введение 1 Начало операции 2 Причины 3 Результаты 4 Современные оценки Список литературы Введение Военное положение в Польше (13 декабря 1981 — 22 июля 1983; польск. Stan wojenny w Polsce 1981-1983) стало периодом диктатуры, которую объявил генерал Войцех Ярузельский, боровшийся с оппозицией, которую в официально коммунистической ПНР представляла правая профсоюзная организация «Солидарность».
Бабятинский, Валерий Константинович
План Введение 1 Биография 2 Признание и награды 3 Творчество 3.1 Роли в театре 3.2 Фильмография Список литературы Введение Валерий Константинович Бабятинский (род. 1942) — советский и российский актёр театра и кино, Народный артист РСФСР (1991)[1][2].
Операторы ввода-вывода
Простейший оператор ввода в Паскале - оператор READ, он записывается в виде: READ(имя,имя,...); где имя - имена переменных или типизированных констант. Вводимые значения задаются в виде допустимых в Паскале констант.
Программа coDec
Задано число к и последовательность чисел от 1 до к 1......к. Необходимо зашифровать литерную последовательность, находящуюся в файле в соответствии с
Лабораторные работы по информатике
Лабораторная работа №1 Тема: «Разработка простейших программ линейных структур» Под работы: Запись формул. Контрольный расчёт для индивидуального задания.
Лабораторная работа №12
Цель работы: Изучение правил описания и вызова подпрограмм: процедур и функций. Получение навыков и овладение приемами работы над подпрограммами. Задание№ 17
Интегрирование методом Симпсона
Московский Авиационный Институт Расчетно графическая работа по: алгоритмическим языкам и программированию. кафедра 403 Выполнил: Гуренков Дмитрий гр. 04-109 /____________/
Word 97
г. Куса 2000г. Оглавление: 1.Окно редактора Word. 3 2.Использование шаблонов документа. 6 3. Копирование текста. 6 4. Сохранение нового документа. Изменение имени документа. Открытие документа. 7
Turbo Paskal Операции над матрицами
Государственный Комитет Российской Федерации по Высшему Образованию Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
16-ти разрядный реверсивный регистр
Проектировка 16-ти разрядного реверсивного регистра сдвига. Преобразование результата на выходе в код 8-4-2-1. Индикация на семисегментном индикаторе.
Cache': перехват текущего устройства
Неудобство стандартных устройств mumps состоит в том, что если выполняется программный код, осуществляющий ввод-вывод через него, то этот процесс сторонним кодом неуправляем иначе как установкой возможных опций устройству.
Поле редактирования с возможностью задания IP-адреса
Разработка родительского компонента для дальнейшего использования при создании приложений "Editip". Иерархия классов и интерфейсов. Применение в качестве инструмента исполнения среды программирования Microsoft Visual Studio.NET. Блок-схемы алгоритмов.
Разработка программного продукта на языке высокого уровня
Pascal - высокоуровневый язык программирования общего назначения и интегрированная среда разработки программного обеспечения для платформ DOS и Windows. Входная информация, требуемая для решения задачи и принятые обозначения; описание алгоритма.
Разработка программы для решения систем линейных уравнений
Методы решения систем линейных алгебраических уравнений. Метод простых итераций и метод Зейделя. разработка программы для решения СЛАУ с произвольным количеством уравнений. Реализация методов Зейделя и простых итераций для получения вектора решений СЛАУ.
Алгоритмы и организация данных
Программа последовательного поиска в последовательном неотсортированном массиве реквизитов единственного значения. Алгоритм сортировки простым выбором. Программа индексирования основного файла по одному реквизиту. Индексные файлы по реквизитам.
Примеры решения задач по программированию
Написание программы вычисления сопротивления электрической цепи, состоящей из двух параллельно и двух последовательно соединенных сопротивлений. Схема машинного алгоритма по условию задачи. Применение операций при написании программ на языке C/C++.
Сортировка массива методом Шелла
Отчёт по практике Выполнили: cт.гр. 97ЭЭ3 Толмач М., Ерегин П., Синева Т. Пензенский государственный университет, Кафедра "Экономическая кибернетика"
История развития вычислительной техники 2 2
Text Text 1953-1955. IBM 604, IBM 608, IBM 702 1953-1955. IBM 604, IBM 608, IBM 702 1965-1966. БЭСМ-6 60 000 транзисторов 200 000 диодов 1 млн. операций в секунду память – магнитная лента, магнитный барабан работали дл 90-х гг. Graphics
Ввод вывод данных в дельфи
Ввод и вывод данных в среде Дельфи Дельфи представляет собой интегрированную среду разработки, инструменты которой позволяют значительно ускорить процесс разработки, создания и отладки программ.
Создание индивидуального сайта
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ КЕМЕРОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Математический факультет
Ассемблер
Волжский университет имени В.Н.Татищева Факультет “Информатика и телекоммуникации” Кафедра “Информатика и системы управления” КУРСОВАЯ РАБОТА по дисциплине: “Организация ЭВМ ”