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

виводить результат. Наприклад

Тут користувач ввів вираз (* 7 9), а інтерпретатор видав результат 63 — значення, пов'язане з цим виразом. Після цього LISP виводить наступне запрошення і чекає введення користувача. Такий цикл називається циклом читання-оцінки-друку (read-eval-print loop) і складає основу інтерпретатора LISP.

Отримавши список, інтерпретатор LISP намагається проаналізувати його перший елемент як ім'я функції, а решта елементів — як її аргументи. Так, s-вираз (f x у) еквівалентний більш традиційному математичному запису f(x, у). LISP значення, що виводиться, є результатом застосування цієї функції до її аргументів. Вирази LISP, які можуть бути осмислено оцінені, називаються формами (form). Якщо користувач вводить вираз, який не можна коректно оцінити, то LISP виводить повідомлення про помилку і дозволяє користувачеві виконати трасування і внести виправлення. Ось приклад сеансу роботи з інтерпретатором LISP.

У декількох з цих прикладів аргументи самі є списками, наприклад (- (+ 3 4) 7). Цей вираз представляє композицію функцій і в даному випадку читається так: "відняти 7 з результату складання 3 і 4". Слово "результат" виділене для того, щоб підкреслити, що функції - як аргумент передається не s-вираз (+ 3 4), а результат його оцінювання.

Оцінюючи функцію, LISP спочатку оцінює її аргументи, а потім застосовує функцію, що задається першим елементом виразу, до оцінки аргументів. Якщо аргументи самі є функціями, то LISP рекурсивно застосовує це правило для їх оцінювання. Таким чином, LISP допускає вкладеність викликів функцій довільної глибини. Важливо пам'ятати, що за умовчанням LISP оцінює всі об'єкти. При цьому використовується угода, що числа відповідають самі собі. Наприклад, якщо інтерпретатору передати значення 5, то LISP поверне результат 5. З символами, наприклад х, можуть бути зв'язані вирази. При оцінюванні зв'язаних символів повертається результат зв'язування. Зв'язані символи можуть з'являтися в результаті виклику функцій. Якщо символ не зв'язаний, то при його оцінці видається повідомлення про помилку

Наприклад, оцінюючи вираз (+(*2 3 ) ( *3 5)), LISP спочатку оцінює аргументи ( *2 3) і (*3 5). Для першого аргументу LISP оцінює його параметри 2 і 3, повертаючи відповідні їм арифметичні значення. Ці значення перемножуються і в результаті дають число 6. Аналогічно результатом оцінки виразу (* 3 5) є 15. Потім ці результати передаються функції складання вищого рівня, при оцінюванні якої повертається 21. Діаграма виконання цих операцій показана на мал. 10.

Мал. 10. Деревовидна діаграма оцінювання простій функції LISP

Крім арифметичних операцій LISP включає безліч функцій роботи із списками. До них відносяться функції побудови і комбінування списків, доступу до елементів списків і перевірки різних властивостей. Наприклад, функція list приймає будь-яку кількість аргументів і будує на їх основі список. Функція nth отримує як аргументи число і список і повертає вказаний елемент цього списку. Нумерація елементів списку починається з нуля. Ось приклади використання цих і інших функцій роботи із списками.

ВИЗНАЧЕННЯ

S-ВИРАЗ

s-вираз можна рекурсивно визначити таким чином.

1. Атом — це s-вираз.

2. Якщо S1, S2. . . , Sn — S-вирази, то S-виразом є і список (S1,

1 2 3 4 5 6 7 8

Схожі роботи

Реферати

Курсові

Дипломні