- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
UNIX — универсальная среда программирования - Брайан Керниган
Шрифт:
Интервал:
Закладка:
Таблица П.1.3: Номера строк в ed
УпражнениеЕсли вы думаете, что знаете ed, попробуйте выполнить текст (см. справочное руководство по quiz(6)).
Приложение 2
Справочное руководство по hoc
Hoc — диалоговый язык для арифметики с плавающей точкой
Б. Керниган Р. ПайкРЕЗЮМЕHoc — это простой программируемый интерпретатор для выражений с плавающей точкой. Он обеспечивает поток управления в стиле Си, определения функций и обычные числовые встроенные функции, такие, как косинус и логарифм.
ВыраженияHoc представляет язык выражений, во многом подобный Си: хотя он и содержит несколько управляющих операторов, большинство операторов, например присваивания, суть выражения, значения которых не принимаются во внимание. Так, оператор присваивания = присваивает значение своей правой части левому операнду и вырабатывает значение, используемое в многократном присваивании. Грамматика выражений имеет вид:
выражение : число
| переменная
| (выражение)
| выражение бинарная_операция выражение
| унарная_операция выражение
| функция(аргументы)
Числа представляются с плавающей точкой. Формат ввода распознается с помощью scanf(3): цифры, десятичная точка, цифры, е или E, показатель степени со знаком. Должна присутствовать по крайней мере одна цифра или десятичная точка; другие компоненты являются необязательными.
Имена переменных формируются из букв, за которыми следуют строки букв и цифр. Здесь бинарная_операция означает двуместные операции, такие, как сложение или логическое сравнение, а унарная_операция — две операции отрицания: '!' (логическое отрицание НЕ) и (арифметическое отрицание, перемена знака). Все операции перечислены в табл. П.2.1.
^ Возведение в степень (FORTRAN **), правоассоциативна ! - Одноместные логическое и арифметическое отрицания * / Умножение, деление + - Сложение, вычитание > >= Операции отношения: больше, больше или равно < <= Меньше, меньше или равно == != Равно, не равно (все отношения одинакового приоритета) && Логическое И (оба операнда всегда вычисляются) || Логическое ИЛИ (оба операнда всегда вычисляются) = Присваивание, правоассоциативнаТаблица П.2.1. Операции по порядку уменьшения приоритета
Функции, как описывается ниже, могут быть определены пользователем. Аргументы функций — это выражения, разделяемые запятыми. В табл. П.2.2 перечислено несколько встроенных функций, имеющих по одному аргументу.
abs(x) Абсолютная величина x atan(x) Арктангенс x cos(x) Косинус x exp(х) Экспонента x int(x) Целая часть x, усеченная в сторону нуля log(x) Натуральный логарифм x log10(x) Десятичный логарифм x sin(x) Синус x sqrt(x) Корень квадратный из xТаблица П.2.2. Встроенные функции
Логические выражения имеют значения 1 (истина) и 0 (ложь). Как и в Си, любое ненулевое значение означает истину. При всех операциях над числами с плавающей точкой сравнения на равенство могут быть неточными. Кроме того, hoc имеет несколько встроенных констант, приведенных в табл. П.2.3.
DEG 57.2957795130823208768 180/π, градусы на радианы E 2.71828182845904523536 е, основание натуральных логарифмов GAMMA 0.57721566490153286060 γ, константа Эйлера-Масчерони PHI 1.61803398874989484820 (√5+1)/2, золотое сечение PI 3.14159265358979323846 π, круговое трансцендентное числоТаблица П.2.3. Встроенные константы
Операторы и поток управленияОператоры hoc имеют следующую грамматику:
оператор : выражение
| переменная выражение
| процедура (список, аргументов)
| while (выражение) оператор
| if (выражение) оператор
| if (выражение) оператор else оператор
| список_операторов
| print список_выражений
| return возможное_выражение
список_операторов : (пусто)
| список_операторов оператор
Присваивание распознается по умолчанию как оператор, а не как выражение, поэтому после ввода в диалоге присваиваний их значения не печатаются.
Отметим, что символ ; не является для hoc специальным: оператор оканчивается символом перевода строки. Это обусловливает некоторые особенности. Ниже показан допустимый оператор if:
if (x < 0) print(у) else print (z)
if (x < 0) {
print(y)
} else {
print(z)
}
Во втором примере скобки не обязательны: символ перевода строки после if оканчивал бы оператор и вызывал бы синтаксическую ошибку там, где опущены скобки.
Синтаксис и семантика средств управления в hoc в основном те же, что и в Си. Одинаковы также while и if, однако в hoc нет операторов break и continue.
Ввод и вывод: read и printФункция ввода read (читать) имеет, подобно другим встроенным функциям, один аргумент: однако он не является выражением: это имя переменной. Следующее число, как определено выше, читается из стандартного входного потока и присваивается поименованной переменной. Функция read возвращает значения 1 (истина), если величина была прочитана, и 0 (ложь), если read встретила конец файла либо ошибку.
Выходной поток порождается оператором print. Аргументы print составляют разделяемый запятыми список выражений и строк, взятых в кавычки, как в Си. Символы перевода строки должны добавляться: print их никогда автоматически не вводит.
Отметим, что read есть специальная встроенная функция и поэтому получает один аргумент в скобках, тогда как print оператор, получающий список, разделяемый запятыми без скобок:
while (read (x)) {
print "value is", x, "n"
}
Функции и процедурыФункции и процедуры в hoc различаются, хотя и определены одним и тем же механизмом. Это различие введено просто для контроля ошибок во время исполнения: возврат значения является ошибкой для процедуры, для функции же ошибочно не возвращать значения.
Синтаксис определения таков:
function: func имя () оператор
procedure: proc имя() оператор
Здесь имя может быть именем некоторой переменной встроенные функции исключаются. Определение, вплоть до открывающейся скобки оператора, должно помещаться на одной строке, как в приведенном выше операторе if.
В отличие от Си тело функции или процедуры может быть любым оператором, не обязательно составным (в скобках). Поскольку символ ; не имеет своего значения в hoc, пустое тело процедуры формируется пустой парой скобок.
Функции и процедуры при вызовах могут получать аргументы, отделенные запятыми. На аргументы ссылаются так же, как в shell: $3 относится к третьему, индексируемому, начиная с единицы, аргументу. Они передаются значениями и внутри функций семантически эквивалентны переменным. Ссылка на аргумент с помощью числа, превышающего число аргументов, переданных процедуре, считается ошибкой. Контроль ошибок динамический, поскольку подпрограмма может иметь переменное число параметров, если ее начальные аргументы влияют на это число (см. функцию printf в Си).

