Песочница

Первое правило принятия решения

Запустите издательское правило вёрстки и объясните, почему при 2 строках заголовок остаётся, а при 1 строке переносится.

Напишите издательское правило вёрстки для заголовка внизу страницы. Заголовок раздела остаётся на странице, если под ним остаётся не меньше 2 строк, а заголовок главы всегда начинается с новой страницы. Проверьте ответы для 2 строк, 1 строки и заголовка главы.

Примеры можно выполнить в Песочнице. Для терминала установите Native или npm по уроку Первая программа.

Напишите и запустите правило

Сохраните всю программу в файле house-style.lspx.

LISPEX
(define (место-заголовка осталось-строк заголовок-главы?)
  (if (and (>= осталось-строк 2) (not заголовок-главы?))
      '(решение оставить)
      '(решение перенести)))

(место-заголовка 5 #f)

Если Native или npm уже установлен, выполните команду из каталога с файлом.

SH
lispex house-style.lspx

Вывод

ВЫВОД
(решение оставить)

Команда завершается с кодом 0 и не создаёт файлов. В Песочнице вставьте и запустите ту же программу, чтобы получить тот же ответ.

Два аргумента описывают заголовок.

  • осталось-строк означает число строк, оставшихся на странице под заголовком.
  • заголовок-главы? равно #t для заголовка главы и #f для заголовка раздела.

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

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

Проверьте 2 строки и 1 строку

Оставьте определение в house-style.lspx. Замените последний вызов списком из трёх вызовов.

LISPEX
(list (место-заголовка 2 #f)
      (место-заголовка 1 #f)
      (место-заголовка 5 #t))

Снова выполните lispex house-style.lspx или запустите обновлённую программу в Песочнице.

Вывод

ВЫВОД
((решение оставить) (решение перенести) (решение перенести))

Команда снова завершается с кодом 0 и не создаёт файлов. Читайте ответы в порядке вызовов.

СлучайПричина ответаРешение
2 строки, заголовок раздела>= включает 2оставить
1 строка, заголовок раздела1 меньше 2перенести
5 строк, заголовок главы(not заголовок-главы?) ложноперенести

Если заменить >= на >, правило перенесёт заголовок и при 2 строках. Этот случай показывает, включено ли граничное значение.

Правило использует перенести для обеих причин переноса. Чтобы различать нехватку места и заголовок главы, добавьте отдельные ветви и метки причин.

Как условия выбирают ответ

Сначала and проверяет (>= осталось-строк 2). Если условие ложно, вычисление and останавливается. Иначе оно проверяет (not заголовок-главы?). Форма if вычисляет только выбранную ветвь. Апостроф сохраняет выбранный список решения как данные.

Приложение для вёрстки считает осталось-строк, пока раскладывает страницу, затем передаёт это число правилу. При одинаковых двух значениях и одинаковых заданных условиях выполнения это правило даёт одинаковый результат.

Редакторы издательства задают правила вёрстки и проверяют правило. Приложение проверяет происхождение входных данных и решает, применять ли ответ к странице.

Упражнение

Оставляйте заголовок раздела на странице, только если под ним остаётся не меньше 3 строк. Проверьте наименьшее число строк, при котором заголовок остаётся, и наибольшее, при котором он переносится.

Показать один ответ

В house-style.lspx замените (>= осталось-строк 2) на (>= осталось-строк 3). Замените последний список вызовов следующим.

LISPEX
(list (место-заголовка 3 #f)
      (место-заголовка 2 #f))

Снова выполните lispex house-style.lspx.

Вывод

ВЫВОД
((решение оставить) (решение перенести))

Команда завершается с кодом 0 и не создаёт файлов.

Выберите, где запускать программу дальше

Когда сможете объяснить ответы для 2 строк и 1 строки, переходите к уроку Лиспекс в вашем приложении.

Для других задач выберите руководство.