Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 172
Текст из файла (страница 172)
Специальная область памяти отведена для обозначения типа функции (ехрг, техрг и т, д.) и содержит указатель на списочную структуру, представляющую определение функции. В таких реализациях обычно используются специальные элементарные операции для прямого получения, вставки и удаления определений функций из специальной области. Стандартные функции Многие из перечисленных далее функций существуют в болыпинстве реализаций 1.15Р.
Однако прежде, чем их использовать, лучше ознакомиться с руководством по используемой версии 1 1БР. Функции работы со списками: + (саг ) ) возвратцаетпервьтйэлементсписка).. (сааг Ь) = (саг(саг ц)),ит.д. + (сцг (.) возвращаетсписок).безпервогоэлемента. (с(Ыг (.) - (сог(сог (.)),и т.д. Функции саг и сйг могут использоваться совместно в произвольном порядке, наприлтер, (сапог (.) =(саг(сйг(сйг (.))). + (сопз х у) возвращает список 6 такой, что (саг (.) = х, а (с()г (.) = у, + (1тзт х у т) возвращает список (х у г).
+ (()цосе х)(ог 'х) не вычисляет х. Предикаты; + (аеоа х) возвращает истину, если х — атом. + (пцеоегр х) возвращает истину, если х — число. + (йгеатегр х у) возвращает истину, если х > у. + (1еезр х у) возвращает истину, если х < у. + (пц)1 х) возвращает истину, если х — пустой атом пт1. + (апО х у) возвращает х А у. + (ог х у) возвращает х м у. + (па1 х) возвращает- х. + (е() х у) возвращает истину, если х и у — одинаковые атомы или списки. + (ецца! х у) возвращаетистину,если хну — спискисодинаковымиалементами. Арифметические функции: + (+ х у) возвращает х + удля атомов хну.
Аналогично работают*,! и -. + (геп х у) возврап(ает остаток от деления х/у. Функции ввода и вывода. Многие из этих функций различаются в различных реализациях 116Р. 624 Приложение, Обзоры языков + (1оас иия файла) считывает файл с указанным именем как последовательность определений языка 1.18Р. Это основное срелство загрузки программ из файлов. + (рш пт х) печатает элемент х. В $сЬеше эта функция называется также О т яр) ау.
+ (орел иия файла) открывает файл с указанным именем и возвращает указатель на этот файл. Обычный способ использования этой функции — сохранение указателя на данный файл с помощью функции зеьт): 1ветл тптт)е Опрея 'иия файла)) и использование переменной ) пт'т1е в операторе геао. + (геао) считывает с терминала следующий атомарный символ (число, символ или строку), (геат) указатель файла) считывает из файла, заданного своим указателем, слелующий атомарный символ, если ланный файл был предварительно открыл. + (пе)р) нлп (ле) р 'сояжапд) может нрелоставить полезную информацию.
+ (1гасе пи я функции) осуществляет трассировку выполнения указанной функции, используется лля облегчения выявления ошибок программы. + ())уе) осуществляет выход из 1 18Р. Абстракции и инкапсуляция Базовый Ь13Р не прслусматривает возможности абстракции данных. Однако Сотпюп 118Р солержнт объекютую систему Сощтоп 118Р ОЬ)ест 8узгегл (СЕОВ). С)08 стал результатом слияния четырех объектно-ориентированных расширений 1.18 Р в середине 80- ггл )ч)етч Е! ачогв, Сопппоп(соря, ОЬ) есг Ы БР и Сопл пюп ОЬ)есГ 1106).
С1.08 прелоставляет следующие возможности: 1. Множественное наслелование, которое обеспечивается наследованием я)) х) и (раздел 7.2.3). 2. Общие функции. 3. Метаклассы и метаобъекты. 4, Способ создания и инициализации объектов, который попускает пользовательское управление процессом. П.7. М1. Пример с пояснениями В листинге П.9 представлен пример суммирования элементов массива. Язык МЕ работает как интерпретатор, в этол) примере используется Бсапйагй М1., разработанный в Пыо-Джерси, Листинг П.я. Суммирование элементов массива на языке М1 1 вептгог ргоч вю! 2 йю О)От'Ыс.втгтпч) тпв = огптс)-огот"О"): 3 О* Значения сохраняются в виве списка сииволов *) 4 гоп 5пвкехыч) = 1т ч-( 1 впеп 1рюпм"'тп 5ою-"); О) П.7.
(Ч(( 625 5 е1ае (Рг!РСШЙ Ч)). б 5оаяемС(С1(Ч)>»бмуС(ьб(Ч>)); 7 оп 5оана1иеа(х:атг!пд>:!РС- 5иаиех((емр1обе(м)), 8 1пп Ргосеазоага(>- 9 (1еС на1 ап!а1е = преп зп("баСа.ап!"). 10 на1 спппС = йд!С(мпрчС(!и(!1е.1>) 11 !и 12 рг~пС(5чпна1иеа(!прчС(!п171е.спьпС))> !3 епб: 14 Рг!РС( Цп")>. 15 теШСпг бага,ая! 16 41234 17 Жаэ) 18 — Чае "Ргпд ап!": 19 (препапд Ргод.ап11 20 на1 ШдпС = Гп : >Сгапд -> )пС 21 на1 5ипвемС " (и .
!Спад 1!!С -> зпС 22 на1 5пвна1иеа - 1п . ССг!пд -> апС 23 на! Ргесеазоа(а = 1п : чшС -> ппаС 24 на1 мс - () : ипмС 25 — Ргосеааоага(): 26 1234 27 5чаи10 28 на! аС - (): ипзС Строки 1-14. Для создания программы вызывается редактор, Текст програм- мы может быть напечатан прямо в сеансе работы с МЕ, а не подключаться с помо- щью команды озе, как в строке 18. Строка 2. Функции перед их использованием необходимо объявлять. Функ- ция б101 С получает в качестве аргумента один символ и возврашает целое значе- ние, преобразуя полученный символ в целое число, как и в вышеописанном при- мере на языке С из раздела П.2. Символ «1» на единицу больше, чем символ «0», «2» больше, чем «0», на 2 и т.
д. Функция огб возвращает целое значение первого символа своего строкового аргумента, Строка 3. Так выглядят комментарии на языке М1. Строки 4 — 6. Здесь определяется функция, которая рекурсивно выбирает оче- редную начальную цифру из массива и добавляет ее значение к сумме, Строка 5. Если список не пустой, то должно вычисляться следующее значение. Печатается заголовок списка. Строки 5-6 формируют последовательность из двух выражений, которые нужно вычислять как часть выражения 0150. Строка 7. Здесь инициализируется сумма элементов списка.
Входная строка преобразуется в список символов с помощью встроенной функции ехр1 обе, затем функция 5паЧ(ехС вычисляет значение каждого символа из списка. Строка 9. Прежде чем вычислять выражение в строке ! 2, вычисляются выра- жения 1ес в строках 9 и 1О. (п1!1е инициализируется как указатель на файл дан- ных. Побочныл( эффектом вычисления этого выражения является открытие фай- ла данных. Строка 12. Переменная соопС содержит количество символов, которые следует прочитать. Это количество символов считывается, и результирующая строка пе- редается для обработки в функцию 5оа!Ча! оез. Получившееся значение выводится на печать.
626 Приложение, Обзоры языков Строка 14. Печатается символ конца строки. Строки 15-16. Для создания файла данных вызывается редактор. Строки 17 — 18. Загружается ЗСапс)агс) М1, и считывается файл ргали.зш(, содержащий последовательность определений функций. Строки 19-24. Вывод интерпретатора М1., указывающий, что он обрабатывал определения функций из входного файла. Печатаются сигнатуры функций Вар С, 5иеиехС, 5япНа) оез и Ргосеззбата.
Строка 25. Вызывается функция РгосезаВата(). Строки 26-2К Приведенные данные (в том числе вычисленная сумма) — результат работы программы. Выход из М1. осуществляется с помощью индикатора конца файла — обычно это сочетание клавиш <ССг) +В>, введенное с клавиатуры, П.7.1. Объекты данных Элементарные типы данных Переменные и константы.
В языке М1. существуют целые (1лС) константы (например, 1, 2, 3, 4), вещественные числа (геа) ) (например, 1.2, 3.4, 1(СЕЗ) с записью в общепринятой нотации, булевая значения (Ьоо) ) (то есть истина или ложь) и строки (ССг1лц) (например, "1", "аЬс" ), Как для вещественных, так и для целых отрицательных чисел используется символ «-» (тильда), В языке М1. регистры различаются, так что Тгое и АВС вЂ” нето же самое, что Сгое и аЬс. Только Сгце и 1а) зе являются булевыми литеральными константами. В М 1 используются соглашения языка С для представления управляющих символов.
Чтобы встроить управляющий символ в строку, следует использовать последовательность символов )л для символа новой строки, )" — для кавычек (без экранирующего символа обратной наклонной черты кавычки в строке воспринимались бы как признак ее завершения), СС для символа табуляции и ) ЬЬЬ, где ЬЬЬ— трехзначный восьмеричный код символа. Идентификаторы — зто последовательности символов, начинающиеся с буквы или символа апострофа (') и содержащие буквы, цифры и символ подчеркивания ( ).
Идентификаторы, начинающиеся с апострофа, рассматриваются как идентификаторы типов. Структурированные типы данных В языке М1 существую~ следующие структурированные объекты: кортежи, списки и записи. Кортеж(Сор)е) представляетсобой последовательностьобъектов,разделенных запятыми и заключенных в скобки. 112 "аЬс". 3) — это кортеж типа1лС*зСг1по*1лС. Кортеж может иметь неограниченное количество уровней вложенности. Кортеж )2, "а".
(3, 4 3), "хуг". Мгве. 7)) имеет тып О лС*згг!лп*()лС* еа))*зтг!лВ*(Ьоо)*!лС)). К 1-му злементу кортежа можно обратиться с помощью конструкпии ФС например, второй злемепт кортежа определяется как 1)2, например(12(2. 4. 6) = 4. Список () )зС) является кортежем объектов одного типа. Четыре строки в списке можно было бы задать как ("а", "Ь", "с". "Ь"), а результирующий тип обозна- чается как зтг)п0 11зт. Аналогично, ((1.21, (3,4Ц будет типа1пт 1те1 1тз1 или список списков целых величин.
Функция й1 обозначает пустой список. Для задания записи (гесогб) в языке М). используется синтаксис (1аЬе1, = значение, 1аЬе1, = значение....), где компоненты записивыбираются операциейЮаЬе1. На самом деле кортежи являются специфической разновидностью записи. Кортеж (10, 23.
"а") является вкземпляром записи (1=10, 2=23. 3="а"). Инициализация. Чисто аппликатнвные языки не имеют концепции присваивания значения области памяти. Однако в языке М1 значение может быть связано с идентификатором с помощью конструкции ча1. Так, чд1 идентификатор - внрввение связывает значение выражения с именем идентификатора, Например, ча1 Х - 7 выведет на печать строку ча) Х - 7 ; тпт означающую, что Х имеет значение 7 типа 1пт. В языке М1. также существует ссылочный тип, который более тесно связан с хранением данных.