Как начинался компьютер
Компьютерная революция
Двоичный код
Разработки военных лет
Интегральные микросхемы
Микрокомпьютер
Персоны
Сеть
Язык компьютера
Развитие ПО
Гибкие системы
Средства разработки
Информатика
Вычислительная наука
Операционные системы
Искусственный интеллект
Предыстория
Поиск
Знания и рассуждения
Логика
Робототехника
 

 
Язык Лисп Печать
   
Ещё одна важная часть терминологии (для тех, кто отказался от работы с tutorial) - это буфер. Во время работы в Emacs, каждый файл, который Вы редактируете, представлен в отдельном буфере. Только один буфер может быть «текущим» в любой момент времени. В текущий буфер поступает весь ввод – всё, что Вы печатаете и любые команды, которые вызываете. Буферы также используются для представления взаимодействия с программами (например с Common Lisp). Есть одна простая вещь, которую вы должны знать – «переключение буферов», означающее смену текущего буфера, так что Вы можете редактировать определённый файл или взаимодействовать с определённой программой. Команда switch-to-buffer, привязанная к комбинации клавиш C-x b, запрашивает имя буфера (в нижней части окна Emacs). Во время ввода имени буфера, Вы можете пользоваться автодополнением по клавише Tab, которое по начальным символам завершает имя буфера или выводит список возможных вариантов. Просто нажав ввод, Вы переключитесь в буфер «по-умолчанию» (таким-же образом и обратно). Вы также можете переключать буферы, выбирая нужный пункт в меню Buffers.

В определенных контекстах для переключения на определенные буферы могут быть доступны другие комбинации клавиш. Например, при редактировании исходных файлов Lisp сочетание клавиш C-c C-z переключает на буфер, в котором вы взаимодействуете с Lisp.
 
Освободите свой разум: Интерактивное програмирование

При запуске Lisp in a Box, вы должны увидеть приглашение, которое может выглядеть примерно так :
 
CL-USER>

Это приглашение Lisp. Как и приглашение оболочки DOS или UNIX, приглашение Lisp это место куда вы можете печатать выражения, которые заставляют что-либо делать компьютер. Однако, вместо того чтобы считывать и выполнять строку команд оболочки, Lisp считывает Lisp выражения, вычисляет их согласно правилам Lisp, и печатает результат. Потом он (lisp) повторяет свои действия со следующим введенном вами выражением. Вот вам бесконечный цикл: считывания, вычисления, и печати(вывода на экран), поэтому он называется цикл-чтение-вычисление-печать (по-английски read-eval-print-loop), или сокращённо REPL . Этот процесс может также называться top-level, top-level listener, или Lisp listener.
 
Через окружение, предоставленное REPL'ом, вы можете определять и переопределять элементы программ такие как переменные, функции, классы и методы; вычислять выражения Lisp; загружать файлы, содержащие исходные тексты Lisp или скомпилированные программы; компилировать целые файлы или отдельные функции; входить в отладчик; пошагово выполнять программы; и проверять состояние отдельных объектов Lisp;

Все эти возможности встроены в язык, и доступны через функции, определённые в стандарте языка. Если вы захотите, вы можете построить достаточно приемлемую среду разработки только из REPL и текстового редактора, который знает как правильно форматировать код Lisp. Но для истинного опыта Lisp программирования вам необходима среда разработки типа SLIME, которая бы позволяла вам взаимодействовать с Lisp как посредством REPL так и при редактировании исходных файлов. Например, вы ведь не захотите каждый раз копировать и вcтавлять куски кода из редактора в REPL или перезагружать весь файл только потому, что изменилось одно определение, ваше окружение должно позволять вам вычислять или компилировать как отдельные выражения так и целые файлы из вашего редактора. 
 
Эксперименты в REPL

Для знакомства с REPL, вам необходимо выражение Lisp, которое может быть прочитано, вычислено и выведено на экран. Простейшее выражение Lisp - это число. Если вы наберете 10 в приглашении Lisp и нажмете ВВОД, то сможете увидите что-то наподобие: 
 
CL-USER> 10
10
 
Первая 10 - это то, что вы набрали. Считыватель Lisp, R в REPL, считывает текст «10» и создаёт объект Lisp, представляющий число 10. Этот объект - самовычисляемый объект, это означает, что такой объект при передаче в вычислитель, E в REPL, вычисляется сам в себя. Это значение подаётся на принтер, который напечатает объект «10» в отдельной строке. Хотя это и похоже на сизифов труд, можно получить что-то поинтереснее если дать интерпретатору Lisp пищу для размышлений. Например, вы можете набрать (+ 2 3) в приглашение Lisp.
 
CL-USER> (+ 2 3)
5
 
Все что в скобках - это список, в данном случае список из трех элементов, символ +, и числа 2 и 3. Lisp, в общем случае, вычисляет списки считая первый элемент именем функции и остальные - выражениями для вычисления и передачи в качестве аргументов этой функции. В нашем случае, символ + - название функции которая вычисляет сумму. 2 и 3 вычисляются сами в себя и передаются в функцию суммирования, которая возвращает 5. Значение 5 отправляется на устройство вывода, которое отображает его. Lisp может вычислять выражения и другими способами, но не будем сильно отдаляться от основной темы. В первую очередь вы должны написать...
 
"Здравствуй, Мир" в стиле Lisp

Нет законченной книги по программированию без программы «Здравствуй, мир»(«hello, world.»)8). После того как интерпретатор запущен, нет ничего проще чем набрать строку «Здравствуй, мир». 
 
CL-USER> "Здравствуй, мир"
"Здравствуй, мир"
 
Это работает поскольку строки, также как и числа, имеют символьный синтаксис понимаемый считывателем Lisp и являются самовычисляемыми объектами: Lisp считывает строку в двойных кавычках и создает в памяти строковой объект, который при вычислении вычисляется сам в себя и потом печатается в том же символьном представлении. Кавычки не являются частью строкового объекта в памяти - это просто синтаксис, который позволяет считывателю определить что этот объект - строка. Принтер также выводит кавычки на вывод, потому что он пытается выводить объекты в таком же виде, в каком понимает их считыватель.

Однако, наш пример не может квалифицироваться как программа «Здравствуй мир». Это, скорее, значение «Здравствуй мир».