Мова обробки списків Lisp

мова

Lisp – мультипарадигмальна мова: об'єктно-орієнтоване, функціональне, процедурне програмування. З'явився 1958 р. Автор: Джон Маккарті. Типізація даних: потужна, динамічна. Діалекти: Common Lisp (CLOS), Scheme, Arc, Clojure, BEE Lisp, мови розширення: AutoLisp та ELisp. Вплинув на Io, Nemerle, Python, Ruby, Smalltalk, Лого

Лісп (Lisp, від англ. List Processing Language - "мова обробки списків"; сучасне написання: Lisp) - сімейство мов програмування, програми та дані в яких представляються системами лінійних списків символів. Лісп є другою в історії (після Фортрана) високорівневою мовою програмування, що використовується до цього дня. Творець Ліспа Джон Маккарті займався дослідженнями в галузі штучного інтелекту (надалі ІІ) і створена ним мова досі є одним з основних засобів моделювання різних аспектів ІІ.

Традиційний Лісп має динамічну систему типів. Мова є функціональною, але багато пізні версії мають також риси імперативності, до того ж, маючи повноцінні засоби символьної обробки, стає можливим реалізувати об'єктну орієнтованість, прикладом такої реалізації є платформа CLOS.

Мова Лісп, поряд з мовою Ada, пройшла процес фундаментальної стандартизації для використання у військовій справі та промисловості, внаслідок чого з'явився стандарт Common Lisp. Його реалізації існують більшість платформ.

Однією з основних ідей мови Lisp є представлення кожного символу як вузла багатокоординатної символьної мережі; при цьому координати, властивості, рівні мережі записані в слотах символу. Основні слоти:

- ім'я символу (основне Аристотелеве А=А з якого виростає лямбда-числення),

- список властивостей, що розширюється (можна вільно розширити слотову систему зручним для вирішення завдання способом).

Мова Лісп є мовою системного програмування для так званих Лісп-машин, що вироблялися у 80-ті роки, наприклад фірмою Symbolics.

Основний механізм мови Лісп — інкапсульована до списку визначальна голова списку та під'єднаний до неї хвіст списку, який також рекурсивно може бути списком. Лисп-машина здатна сприймати кожен список, що надходить на неї, на самому абстрактному рівні, наприклад як мета-Лісп-машину, що модифікує сприймаючу машину. У такому динамічному, високоабстрактному середовищі можна реалізувати як суворо наукові системи, так і безліч програмістських трюків і генераторів всіляких машин.

Будь-яка програма мовою Лісп складається з послідовності виразів (форм). Результат роботи програми полягає у обчисленні цих виразів. Всі вирази записуються у вигляді списків — однієї з основних структур Лиспа, тому вони можуть бути легко створені за допомогою самої мови. Це дозволяє створювати програми, які змінюють інші програми чи макроси, що дозволяють істотно розширити можливості мови.

Список є послідовністю елементів будь-якого роду, зокрема інших списків. Наприклад, (1 3/7 'foo #'+) складається з цілого числа, раціонального дробу, символу foo та покажчика на функцію додавання. Вирази надаються списками в префіксному записі: перший елемент має бути формою, тобто функцією, оператором, макросом або спеціальним оператором; інші елементи - аргументи цієї форми, що передаються формі для обробки. Функція list повертає список, що складається з її аргументів: наприклад, (list 1 3/7 'foo #'+) повертає список, згаданий раніше. Якщо деякі елементиє виразами, спочатку обчислюється їх значення: (list 1 2 (list 1 2)) повертає (1 2 (1 2)). Арифметичні оператори записуються за тим самим принципом, наприклад (+ 4 (* 2 3)) видає 10.

Спеціальні оператори дозволяють керувати послідовністю обчислень. З їх допомогою реалізуються розгалуження та цикли. Оператор if дозволяє обчислити один із двох виразів залежно від виконання умови, яке теж є виразом. Якщо його результат не БРЕХНЯ (не nil), то обчислюється перший аргумент, інакше другий. Наприклад, (if nil (list 1 2 "foo") (list 3 4 "bar")) завжди повертає (3 4 "bar").

Синтаксис у формі Бекуса - Наура:

Приклад програми, що виводить повідомлення "Hello, world!":

Приклад Куайн (програми, що виводить свій вихідний код) на Ліспі:

Ця програма має працювати на більшості діалектів Ліспа, у тому числі і на Scheme.

Ітеративна версія функції визначення N-го числа Фібоначчі з використанням макросу Loop:

Рекурсивна версія функції N-го числа Фібоначчі:

Застосування

Перші сфери застосування мови Лісп були пов'язані з символьною обробкою даних та процесами прийняття рішень.

Найпопулярніший сьогодні діалект Common Lisp є універсальною мовою програмування. Він широко використовується в різних проектах: Інтернет-сервери та служби, сервери додатків і клієнти, що взаємодіють з реляційними та об'єктними базами даних, наукові розрахунки та ігрові програми.

Один із напрямків використання мови Lisp — її використання як скриптова мова, що автоматизує роботу в ряді прикладних програм:

- мова Лісп використовується як мова сценаріїв у САПР AutoCAD (діалект AutoLISP);

- його діалект – SKILL – використовується для написанняскриптів у САПР Virtuoso Platform компанії Cadence Design Systems;

- мова Лісп використовується як мова сценаріїв у видавничому програмному забезпеченні Interleaf/Quicksilver (діалект Interleaf Lisp);

- у віконному менеджері Sawfish застосовується спеціальний діалект Лиспа Rep, який значною мірою повторює діалект Лиспа від Emacs;

- діалект Scheme використовується як одна зі скриптових мов у графічному процесорі Gimp;

- діалект GOAL використовується для високодинамічних тривимірних ігор;

Сфери застосування мови Лісп різноманітні: наука та промисловість, освіта та медицина, від декодування геному людини до системи проектування авіалайнерів.

Справа в тому, що в його постановці та висновках зроблена заміна, аналогічна заміні в шкільному жартівливому завданні на кмітливість, в якій запитується: - Скільки яблук на березі, якщо на одній гілці їх 5, на іншій гілці - 10 і так далі При цьому учні навмисно відволікаються від того основного факту, що на березі яблука не ростуть, в принципі.

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