239
При необходимости отредактировать текст программы редактор текущего
программного модуля запускается командой :e. После сохранения
текста модуль необходимо перезагрузить командой :r.
Еще одно небольшое замечание. При отладке программ часто
приходится исполнять одни и те же команды и вычислять одни и те же
выражения. Система хранит информацию о последних введенных
командах, и
их можно вызвать на экран, нажимая клавиши «стрелка вверх»
и «стрелка вниз». Вызванную команду можно отредактировать и запустить
обычным образом, нажав клавишу Enter.
Приведенных сведений вполне достаточно для подготовки,
редактирования и запуска простейших программ. Рассмотрим теперь, как
создаются и редактируются многомодульные проекты и как происходит
управление модулями.
Каждый модуль в программе
имеет имя и содержит набор функций.
Некоторые функции несут смысловую нагрузку только в пределах данного
модуля и не экспортируются в другие модули. Другие функции могут
использоваться всеми модулями. Набор таких функций называется
списком экспорта данного модуля.
В заголовке модуля указывается его имя (имя модуля должно
начинаться с большой буквы) и
список экпорта, таким образом, заголовок
модуля имеет следующий вид:
module MyModuleName (export1, export2, ...) where
и далее следуют определения функций констант и т.п. Если список
экспорта отсутствует, то считается, что экспортируются все
идентификаторы, определенные в модуле.
В задаче о вычислении корней квадратного уравнения мы
определяли имя модуля SqRoot, и в качестве списка экспорта указывали
единственную функцию sqroot. Тем не менее, поскольку загружаемый
модуль был «главным
», то мы могли вызывать любые функции из этого
модуля, в частности, функцию main, а также и любые другие функции,
например, discr. В многомодульных программах, однако, всем другим
модулям будет доступна единственная функция модуля SqRoot –
функция sqroot.
Определим программу из двух модулей. В первом из них определим
две функции, вычисляющие разложение
натурального числа на простые
множители. Одна функция – factorize – будет вычислять список всех
простых сомножителей числа, при этом список будет содержать каждый
сомножитель столько раз, сколько раз он входит в разложение числа на
простые множители. Вторая функция – dividers – будет также
определять список простых сомножителей числа, но каждое число будет
входить в него
по одному разу.