WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Функції виводу - Реферат

Функції виводу - Реферат


Реферат на тему:
Функції виводу
Функції виводу передають результат в поточний поток виводу (COS - Current Output Stream).
1. (PRIN1 obj). Передає символьне представлення об'єкту в COS і повертає об'єкт. Функція друкує символи використовуючи їх P-імена. Друк відбувається згідно з поточною системою числення. Змінна *PRINT-POINT* контролює максимальну кількість десяткових цифр для зображення на екрані дисплею.
2. (PRINC obj). Працює як і PRIN1, але P-імена виводяться з контрольними символами. Значення контрольної змінної *PRINT-ESCAPE* при виклику PRINC стає рівним T.
(DEFUN PRINC (obj *PRINT-ESCAPE*)
(SETQ *PRINT-ESCAPE* T)
(PRIN1 obj) )
3. (WRITE-BYTE n). Якщо n - ціле число від 0 до 255, то функція виводить в COS символ, ASCII-код якого дорівнює n, і повертає n.
4. (TERPRI n). Якщо n - невід'ємне ціле число, то в COS передається n символів ASCII нового рядка. Якщо функція викликана без аргументів, n вважається рівним 1. Сама функція повертає NIL.
(DEFUN TERPRI (n)
((AND (INTEGERP n) (>= n 0))
(LOOP
((ZEROP n) NIL)
(WRITE-BYTE 13)
(WRITE-BYTE 10)
(DECQ n) ) )
5. (PRINT obj) Для виводу виразів можна використовувати функцію PRINT. Вона має один аргумент. При виклику цей аргумент обчислюється, а потім виводиться його значення. Перед виводом аргумента відбувається перехід на новий рядок, а після виводу аргумента друкується проміжок. Значенням функції є значення аргумента. Побочним ефектом функції PRINT є друк повертаємого знчення. Функцію PRINT можна визначити так:
(DEFUN PRINT (x)
(TERPRI) (PRIN1 x) (PRINC " ") )
6. (SPACES n). Передає n порожніх ASCII - символів (проміжків) в COS. Повертає кількість переданих символів після того як буде переданий останній новий рядок.
7. (FRESH-LINE). Якщо ми знаходимося на початку рядка, функція просто повертає NIL. Інакше вона передає в COS новий рядок і повертає Т.
8. (WRITE-STRING символ), (WRITE-LINE символ). В COS виводиться P-ім'я символа. Якщо аргумент не є символом, обидві функції повертають NIL. Функція WRITE-LINE після виводу символа в COS автоматично виконує перехід на новий рядок командою (TERPRI).
9. (SET-CURSOR рядок колонка). Текстовий режим для Ліспа має розмір 80*25. Ця функція встановлює курсор у відповідну позицію.
10. (ROW), (COLUMN). Відповідно повертають поточний рядок (стовпчик) поточного положення курсора.
11. (CLEAR-SCREEN). Стирає екран, встановлює курсор в (0, 0) та повертає T.
4.5. Обчислювані функції
Обчислення виразів та звернення до функцій відбувається автоматично інтерпретатором muLisp. Обчислювані функції необхідні в тих випадках коли необхідно безпосередньо обчислити вираз або звернутися до функцій. Визначенням функції є список, який складається з трьох частин: імені типу функції, формальних параметрів та тіла функції.
CAR-елементом визначення функції є ім'я типу фукції - LAMBDA, NLAMBDA чи MACRO. Тип функції дає інтерпретаторові інформацію про те, як використовувати дану функцію.
Визначення функцій та їх обчислення в Ліспі основано на лямбда-численні Чорча. Лямбда вираз, який взято з лямбда числення, є важливим механізмом у програмуванні. В лямбда численні Чорча функція записується у вигляді:
lambda (x1, x2, ..., xn) . f
В Ліспі лямбда вираз має вигляд:
(LAMBDA (x1 x2 ... xn) f)
Символ LAMBDA говорить нам про визначення функції. Символи xi - це формальні параметри, f - тіло функції. Тілом функції може бути довільна форма, значення якої може обчислити інтерпретатор Ліспа. Функцію, яка обчислює суму квадратів двох чисел, можна визначити так:
(LAMBDA (x y) (+ (* x x) (* y y)) )
Формальність параметрів вказує на те, що ми можемо замінити їх на інші символи, але від цього не зміниться сутність обчислення функції.
Лямбда вираз - це визначення обчислення та параметрів функції в чистому вигляді без фактичних параметрів або аргументів. Для застосування такої функції до певних аргументів, необхідно поставити лямбда вираз на місце імені функції:
(лямбда-вираз a1 a2 ... an)
Тут ai - форми, що задають фактичні параметри.
Наприклад, множення (* 3 4) можна записати з використанням лямбда виклику:
$ ((LAMBDA (x y) (* x y)) 3 4)
12
Наступний виклик будує список з двох аргументів:
$ ((LAMBDA (x y) (CONS x (CONS y NIL))) 'dog 'cat)
(dog cat)
Таку форму виклику називають лямбда викликом. Обчислення лямбда виклику відбувається в два етапи. Спочатку обчислюються значення фактичних параметрів та відповідні формальні параметри зв'язуються з отриманими значеннями. На другому етапі обчислюється форма, яка є тілом лямбда виразу. Отримане значення повертається в якості значення лямбда виклику. По завершенню обчислення формальним параметрам повертаються зв'язки , які існували до лямбда виклику. Весь цей процес називається лямбда перетворенням.
Пам'ятайте, що лямбда вираз без фактичних параметрів є лише визначення, а не форма, яку можна обчислити. Сам по собі лямбда вираз інтерпретатором не сприймається. Якщо ви введете: (LAMBDA (x y) (CONS x (CONS y NIL))), то інтерпретатор Ліспу видасть повідомлення про помилку.
Лямбда вираз є як чисто абстрактним механізмом для визначення та опису обчислення, так і механізмом для зв'язування формальних та фактичних параметрів під час виконання обчислення. Лямбда вираз є функцією без імені.
Ми вже говорили про те, як визначити нову функцію - це можна здійснити за допомогою функції DEFUN. Визначення функції викликається так:
(DEFUN )
Для спрощення опустимо зовнішні дужки у лямбда виразі та сам атом LAMBDA. Тоді ми отримаємо знайоме нам визначення функції. Наступні визначення еквівалентні:
(DEFUN list2 (LAMBDA (x y) (CONS x (CONS y NIL))))
та
(DEFUN list2 (x y) (CONS x (CONS y NIL)))
Функція DEFUN з'єднує символ з лямбда виразом, після чого символ починає іменувати обчислення, яке визначається лямбда виразом. Значенням функції DEFUN є ім'я нової функції.
За допомогою структури LET, яка визначена в common.lsp, можна утворити локальний звя'зок. Значення змінним форми LET присвоюються одночасно. Ця структура має наступний вигляд:
(LET ((m1 a1) (m2 a2) ... (mN aN)) ... ),
яка в дійсності є лямбда викликом, де формальні та фактичні параметри знаходяться разом на початку структури:
((LAMBDA (m1 m2 ... mN) ... ) a1 a2 ... aN)
Наступні виклики еквівалентні:
$ (LET ((x 4)(y 2))(+ x y)) $ ((LAMBDA (x y) (+ x y)) 4 2)
6 6
Функція типу NLAMBDA називається необчислюваною. Якщо викликається необчислювана функція,
Loading...

 
 

Цікаве