Програмне забезпечення основане на використанні агентів

S2. . . , Sn).

Список — це неатомарний s-вираз.

Форма— це підмет оцінюванню s-вираз. Якщо це список, то перший елемент обробляється як ім'я функції, а подальші оцінюються для отримання її аргументів.

Оцінювання виразів виконується таким чином. Якщо s-вираз — число, то повертається значення цього числа. Якщо s-вираз — атомарний символ, повертається пов'язане з ним значення. Якщо цей символ не зв'язаний, повертається повідомлення про помилку.

Якщо s-вираз — це список, оцінюються всі його аргументи, окрім першого, а до отриманого результату застосовується функція, визначувана першим аргументом.

У LISP у вигляді s-виразів представляються і програми, і дані. Це не тільки спрощує синтаксис мови, але і у поєднанні з можливістю управління оцінкою s-виразів спрощує написання програм, оброблювальних як даних інші програми. Це полегшує реалізацію інтерпретаторів на LISP.

2. Управління оцінюванням в LISP: функції quote і eval

У декількох прикладах з попереднього розділу перед списками аргументів розташовувався символ одинарних лапок '. Цей символ, який також може бути представлений функцією quote, є спеціальною функцією, яка не оцінює свої аргументи, а запобігає їх оцінюванню. Часто це робиться для того, щоб аргументи оброблялися як дані, а не як оцінювана форма.

Оцінюючи s-вирази, LISP спочатку прагне оцінити всі аргументи

Якщо інтерпретатору передається вираз (nth 0 (а b з d) ), то він спочатку намагається оцінити аргумент (а b с d). Ця спроба приведе до помилки, оскільки а— перший елемент цього s-виразу — не є функцією LISP. Щоб запобігти цьому, слід скористатися вбудованою функцією quote. Вона залежить від одного аргументу і повертає цей аргумент без його оцінки. Наприклад

Оскільки функція quote використовується досить часто, то в LISP допускається її скорочене позначення у вигляді символу '. Тому попередні приклади можна переписати в наступному вигляді.

В цілому, функція quote використовується для запобігання оцінюванню аргументів, якщо вони повинні оброблятися не як форми, а як дані. У розглянутих раніше прикладах виконання простих арифметичних дій функція quote не потрібна, оскільки числа завжди оцінюються своїми значеннями. Розглянемо результат застосування функції quote в наступних викликах функції list.

У першому прикладі аргументи не квотовані, тому вони оцінюються і передаються у функцію list згідно використовуваній за умовчанням схемі. У другому прикладі функція quote запобігає оцінці, і як аргументи функції list передаються самі s-вирази. І хоча (+1 2) — це осмислена форма LISP, функція quote запобігає її оцінюванню. Можливість запобігти оцінюванню програм і поводитися з ними як з даними — важлива властивість LISP.

На додаток до функції quote LISP також надає в розпорядження користувача функцію eval, що дозволяє оцінити s-вираз. Вона залежить від одного аргументу, що є s-виразом. Цей аргумент оцінюється як звичайний аргумент функції. Проте результат знову оцінюється, і як значення виразу eval повертається остаточний результат. Ось приклади застосування функцій eval і quote.

Функція eval, по суті, забезпечує звичайне оцінювання s-виразів. Завдяки функціям quote і eval істотно спрощується розробка метаінтерпретаторів (meta-interpreter) — варіацій стандартного інтерпретатора LISP, що визначають альтернативні або додаткові можливості

1 2 3 4 5 6 7 8

Схожі роботи

Реферати

Курсові

Дипломні