Введение в Scheme

Все привыкли, что первая программа должна выводить «Hello, World!» на консоль. Используя любимый редактор создайте файл hello.scm со следующим содержанием:

;Первая программа
 
(begin
  (display "Hello, World!")
  (newline))

Первая строка это комментарий. Когда Scheme видит точку с запятой, он игнорирует эту строку.

Форма 'begin' это способ Scheme объявить последовательность подформ. В этом случае присутствуют две подформы. Первая это вызов процедуры вывода переданного аргумента (строка «Hello, World!») на экран (или «стандартный вывод»). Вторая - процедура 'newline' которая выводит символ возврата каретки (переход на новую строку).

Чтобы запустить программу нужно сначала запустить Scheme. Обычно это делается вводом команды для запуска исполняемого файла Scheme в командной строке операционной системы, например в случае использования MzScheme нужно ввести

mzscheme

Эта команда запустит Scheme, который ожидает ввода данных, оценивает их и выводит результат (если он есть), после чего ждет нового ввода. По этой причине его часто называют циклом чтение-оценка-вывод (read-eval-print loop). Заметьте, что такой подход не сильно отличается от принципа работы командной строки операционной системы, которая также читает команды, исполняет их и возвращается в режим ожидания. Как и у операционной системы, у Scheme есть приглашение. Оно обычно выглядит так: '>', но может выглядеть и по другому.

В командной строке Scheme нужно ввести команду загрузки нашего файла:

(load "hello.scm")

Scheme исполнит содержание файла hello.scm, то есть выведет на экран «Hello, World!» и символ переноса строки. После этого вы снова увидите приглашение командной строки, ожидающее ввода новых данных.

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

(begin (display "Hello, World!")
       (newline))

и Scheme выведет на экран

Hello, World! 

На самом деле, вы могли просто ввести строчку «Hello, World!» в командной строке и получили бы тот же вывод

"Hello, World!"

потому что это и есть результат оценки «Hello, World!».

Кроме того, что во втором случае текст выводится в кавычках, есть еще одно важное отличие между двумя последними программами. Первая (с формой 'begin') ничего не вычисляет, а только исполняет процедуру display и процедуру переноса строки. В то время как вторая программа вычисляется с результатом «Hello World!».

Отныне форма ⇒ будет указывать на вычисление результата. То есть

E =>  v

указывает, что форма результатом оценки формы Е оказалось v. Например:

(begin
  (display "Hello, World!")
  (newline))
=> 
 
(ничего, или void, не смотря что побочным эффектом был вывод на экрна текста
 
Hello, World! 

С другой стороны:

"Hello, World!"
=>  "Hello, World!"

В любом случае, Scheme все еще ожидает команды. Введите

(exit)

это вернет вас к командной строке операционной системы.

Командная строка, ожидающая ввода команды (listener) - удобный инструмент для интерактивного тестирования программ или частей программ. Но ее использование вовсе не обязательно. Конечно, вы можете быть приверженцем традиций операционных систем в их файловой сущности и запускать файлы с помощью Scheme без работы с командной строкой. В MzScheme, к примеру, вы можете указать файл для загрузки еще при запуске самого окружения (в командной строке ОС)

mzscheme -r hello.scm 

И это выведет приветствие на экран без возни с консолью. После приветствия mzscheme вернет пользователя обратно в ОС. Это почти то же самое, что ввести

echo Hello, World! 

Вы можете сделать hello.scm командой операционной системы (shell-скрипт или batch-файл), но для этого придется подождать до главы 16.


Назад | Оглавление | Вперед

 
scheme/vvedenie_v_scheme.txt · Последние изменения: 2009/10/04 03:55 От freetonik
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki