Форматований введення

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

ДНІПРОПЕТРОВСЬКА ОБЛАСНА АДМІНІСТРАЦІЯ
ІНСТИТУТ ПІДПРИЄМНИЦТВА «СТРАТЕГІЯ»
КАФЕДРА ЕКНОМІЧЕСКОЙ КІБЕРНЕТИКИ І
ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
ДОКДАД
З ДИСЦИПЛІНИ:
«ФУНКЦІОНАЛЬНИЙ ПРОГРАМУВАННЯ»
НА ТЕМУ:
«Форматувати ВВЕДЕННЯ»
Виконав:
студент групи П-01-51
Руденко Володимир
2003р.
м. Жовті Води

Якщо не використовувати спеціальну команду введення, то дані можна передавати лісповской функції тільки через параметри і вільні змінні. Відповідно, без використання висновки, результат можна отримати лише через кінцеве значення виразу. Часто все ж виникає необхідність вводити вихідні дані і видавати повідомлення т тим і самим керувати і отримувати проміжні результати під час обчислень, як це робиться і в інших мовах програмування.
Лісповская функція читання READ відрізняється від введення в інших мовах програмування тим, що вона обробляє вираз цілком, а не окремі елементи даних. Виклик цієї функції здійснюється користувачем (трохи спрощено) у вигляді:
(READ)
Як тільки інтерпретатор зустрічає пропозицію READ, обчислення призупиняються до тих пір, поки користувач не введе який-небудь символ або цілком вираз.
READ ніяк не показує, що воно чекає введення виразу. Програміст повинен сам повідомити про це за допомогою функцій введення. READ лише читає вираз і повертає в якості значення саме цей вислів, після чого обчислення тривають.
За своєю дією READ представляє собою функцію, але в неї є побічний ефект, що складається саме у введенні вираження. З огляду на це, READ є не чистою функцією, а псевдо функцією.
Якщо прочитане значення необхідно зберегти для подальшого використання, то виклик READ повинен бути аргументом будь-якої форми, наприклад привласнення (SETQ), яка зв'яже отриманий вираз:
_ (Setq input (read))
(+ 2 3); введене вираз
(+ 2 3); значення
_input
(+ 2 3)
Форма, що викликає інтерпретатор, і функція READ спільно з іншими функціями дозволяє читати висловлювання зовнішні по відношенню до програми. З них можна будувати нові лісповскіе вирази або цілі програми. Побудовані структури можна обчислити, передавши їх безпосередньо інтерпретатору:
_ (Eval input)
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% bc)
(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))))
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Доповідь
11.8кб. | скачати


Схожі роботи:
Введення в C класи
Введення в психологію 2
Введення в брандмауери
Пристрій введення
Введення в мікроекономіку
Введення в медіапланування
Введення в психосоматику
Кардіографія введення
Введення в політологію 2
© Усі права захищені
написати до нас