Введение в программирование на Лиспе

         

Диалог с Лисп-системой


Рассмотрим особенности функционирования Лисп-интерпретатора на примере системы GNU Clisp.

> clisp

Работа системы начинается с заставки вида:

> clisp

i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ `+' / I 8 8 8 8 8 8 \ `-+-' / 8 8 8 ooooo 8oooo `-__|__-' 8 8 8 8 8 | 8 o 8 8 o 8 8 ------+------ ooooo 8oooooo ooo8ooo ooooo 8 Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 Copyright (c) Bruno Haible, Marcus Daniels 1994-1997 Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 Copyright (c) Bruno Haible, Sam Steingold 1999-2002

[1]>

Символ ">" - приглашение к вводу выражений для интерпретации. Выход из Лисп-системы осуществляется как вызов функции "BYE"

[1]> (BYE)1)

Происходит возврат к операционной системе.

[1]> (BYE) Bye.

Основной рабочий цикл начинается с ввода данных, представляющих так называемое символьное выражение.

[1]> (CONS 1 2)

Интерпретатор вычисляет это выражение, затем печатается полученный результат и появляется очередное приглашение:

[1]> (CONS 1 2) (1 . 2) [2]>

При недостатке правых скобок ничего не происходит:

[1]> (CONS 1 2



Система ждет, пока не получит недостающие скобки, прежде чем предложить прочитанную форму интерпретатору:

[1]> (CONS 1 2 ) (1 . 2) [2]>

Баланс скобок проще всего поддерживать, набирая пары "()" и вставляя потом между ними нужный текст. При наборе закрывающей скобки система на полсекунды перемещает курсор на соответствующую левую скобку, что также помогает замечать нарушения в балансе скобок.

При невозможности интерпретировать полученное данное как символьное выражение система печатает диагностическое сообщение:

[2]> (CONS A B) *** - EVAL: variable A has no value2) 1. Break [3]>

В этом примере перед атомами "A" и "B" следует поставить апострофы, показывающие системе, что здесь эти атомы не рассматриваются как переменные. Система перешла в режим обработки прерывания, выйти из которого можно с помощью Ctrl-D (одновременное нажатие).

[5]> (cons a 'b)

*** - EVAL: variable A has no value 1. Break [6]>3) [7]> (cons 'a 'b) (A . B) [8]>

Оперативную коррекцию можно делать без повторного набора текста строковым редактором. Стрелка вверх, предназначенная для перемещения курсора, здесь используется для перехода к ранее набранной строке.

[1]> (CONS 1 2) (1 . 2) [2]>4) (CONS 1 2)

Теперь эту строку можно подкорректировать:

[1]> (CONS 1 2) (1 . 2) [2]> (CONS 4 5)5) (4 . 5)

Можно пользоваться любым регистром при наборе имен, включая русский регистр.6) При выводе происходит сведение к заглавным буквам.

[1]> (cons 'ГОЛОВА 'хвост) (ГОЛОВА . ХВОСТ) [2]>



Содержание раздела