Знаймо

Додати знання

приховати рекламу

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

Lisp



План:


Введення

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

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

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

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

  • ім'я символу (основне Арістотелевой А = А з якого виростає лямбда-числення),
  • функціональний слот,
  • слот-значення
  • розширюваний список властивостей (можна вільно розширити слотові систему зручним для розв'язання задачі способом).

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


1. Синтаксис

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

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

Зовні вихідний код програми на Ліспі відрізняється великою кількістю круглих дужок; редагування програм значно спрощується використанням текстового редактора, що підтримує автоматичне вирівнювання коду, підсвічування відповідних пар дужок і такі спеціальні команди, як "закрити всі відкриті дужки", "перейти через список вправо" і т. д. [1]

Список є послідовністю елементів будь-якого роду, в тому числі інших списків. Наприклад, (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").

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

s_expression ::= atomic_symbol | "(" s_expression "." s_expression ")" | list

list ::= "(" s_expression { s_expression } ")"

atomic_symbol ::= letter atom_part

atom_part ::= empty | letter atom_part | number atom_part

letter ::= "a" | "b" | " ..." | "z"

number ::= "1" | "2" | " ..." | "9"

empty ::= " "


2. Приклади

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

 (  format t  "Hello, world! ~%"  ) 

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

 (  (  lambda  (  x  )  (  list  x  (  list  '  quote  x  )  )  )  '  (  lambda  (  x  )  (  list  x  (  list  '  quote  x  )  )  )  ) 

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

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

 (  defun  fibonacci  (  n  )  (  loop repeat  (  + N  1  )  for a  =  1  then b  and  b  =  1  then  (  + Ab  )  finally  (  return  a  )  )  ) 

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

 (  defun  fibonacci  (  n  )  (  if  (  or  (  =  n  0  )  (  =  n  1  )  )  1  (  +  (  fibonacci  (  - N  1  )  )  (  fibonacci  (  - N  2  )  )  )  )  ) 

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

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

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

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

  • мова Лісп використовується як мова сценаріїв в САПР AutoCAD (діалект AutoLISP);
  • його діалект - SKILL - використовується для написання скриптів в САПР Virtuoso Platform компанії Cadence Design Systems;
  • мова Лісп є одним з базових засобів текстового редактора Emacs (діалект EmacsLISP) [2];
  • мова Лісп використовується як мова сценаріїв у видавничому програмному забезпеченні Interleaf / Quicksilver (діалект Interleaf Lisp);
  • у віконному менеджері Sawfish застосовується спеціальний діалект Ліспу Rep, який значною мірою повторює діалект Ліспу від Emacs;
  • діалект Scheme використовується в якості одного з скриптових мов в графічному процесорі Gimp;
  • діалект GOAL використовується для високодинамічні тривимірних ігор;
  • мова Лісп може використовуватися для написання скриптів в аудіоредактор Audacity.

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


4. Цікаві факти

  • Існують альтернативні розшифровки назви LISP: Lots of Irritating Superfluous Parentheses [3] ("Багато дратівливих зайвих дужок") або Lost In Stupid Parentheses - натяки на особливості синтаксису.

Примітки

  1. Помилки щодо Лісп - lisp.ru / page.php? id = 14. - Стаття, свого роду "вільний переклад" 1 глави з книги Successful Lisp Девіда Лемкінса. архіві - www.webcitation.org/617VrFaA3 з першоджерела 22 серпня 2011.
  2. По суті, велика частина Emacs написана на EmacsLISP, що дає необмежені можливості розширення функціональності
  3. The Jargon File - Lisp - www.catb.org/ ~ esr / jargon / html / L / LISP.html (Англ.)

Література


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

Схожі роботи | скачати

Схожі роботи:
Common Lisp
© Усі права захищені
написати до нас
Рейтинг@Mail.ru