Когда это нужно
Здесь проходит граница между детерминированным гостевым вычислением и эффектами среды. Для явного текста используйте встроенный вывод; файлы, сеть, время, случайность и внешние действия оставляйте вызывающему приложению.
Проверьте запуском
(begin (display "answer=") (write 42) (newline) 0)Наблюдаемый результат
answer=42
0Разбор примера
display выводит содержимое строки, write — каноническую гостевую запись
42, а newline добавляет перевод строки. println в точности равен
display с последующим переводом строки. Последний 0 является результатом
программы, который печатает CLI, поэтому он следует после явного вывода.
Как рассуждать
displayпечатает строки без кавычек и символы как глифы;writeиспользует повторно читаемые кавычки, экранирование и запись символов.- Все четыре процедуры возвращают ноль значений. Явный вывод и автопечать CLI делят один порядок stdout, а квитанция отдельно хранит значения завершённых корневых форм.
- Уже записанный вывод сохраняется, если следующая форма завершается ошибкой.
- Выбор файла/stdin и метки источника в CLI относятся к вызову, а не к новым связываниям языка.
- Внешние возможности должны быть явными и версионированными, а не находиться через запасной поиск глобальных имён среды.
Быстрый выбор
| Операция | Доступна внутри Лиспекса? | Альтернатива |
|---|---|---|
| каноническая печать значения | да: write | когда важна повторно читаемая запись |
| текст для человека | да: display, newline, println | порядок детерминирован |
| файл или сеть | нет | выполнить на явной границе вызова |
| часы или случайность | нет | передать выбранное значение во входе |
| внешнее действие по решению | нет | разрешить и выполнить в коде потребителя |
Частая ошибка
Порты, файловая система, сеть, время, случайность и неограниченное вычисление среды не входят в текущий чистый профиль.
Текущие границы
- Буфер вывода ограничен. За этими процедурами нет фоновых портов, файлов или сетевых дескрипторов.
- Выпуск целевого языка не является режимом выполнения Lispex.
Куда дальше
Руководство по средам помогает выбрать поверхность для границы с хостом, а решения показывают возврат помеченных данных вместо действия.