Все привыкли, что первая программа должна выводить «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.
← Назад | Оглавление | Вперед →