|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[1] рены далее). Сейчас мы только приведем пример того, что вы можете получить при возникновении ошибки времени исполнения: -3 div 0; Failure: Div Ошибки в согласовании типов не так привычны. Мы подробно рассмотрим типы и связанные с ними ошибки позднее; пока отметим, что ошибки в согласовании типов возникают при некорректном использовании значений, например, при попытке прибавить 3 к true: - 3+true; Type clash in:3+true Looking for a:int I have found a:bool Одной из весьма неприятных ошибок, не распознаваемых ML-систе-мой, является бесконечный цикл. Если вы подозреваете, что ваша программа зациклилась, вы можете прекратить ее выполнение, нажав клавишу прерывания (обычно Ctrl-C). ML выдаст сообщение, говорящее о том, что возникло исключительное событие "interrupt", и вернется на верхний уровень выполнения программы. Некоторые реализации содержат средства отладки, которые могут помочь в определении причины зацикливания. Бывают и другие виды ошибок, но они встречаются значительно реже, и возможные причины их трудно объяснить в общем случае. Если вы встретитесь с сообщением об ошибке, смысл которого вы не можете понять, постарайтесь найти кого-нибудь, кто имеет больше опыта в работе с ML, чтобы он помог вам разобраться в ситуации. Детали интерфейса пользователя меняются от реализации к реализации, особенно в части формата ВЫ ВОД et И сообщений об ошибках. Приводимые в настоящей книге примеры основываются на Эдинбургском ML; мы полагаем, что после знакомства с этими примерами у вас не должно возникнуть трудностей в понимании выдач других ML-систем. 2.2 Первичные выражения, значения и типы Мы начнем наше введение в ML с описания множества первичных типов. В ML тип есть множество значений. Например, целые числа образуют тип; множество всех символьных строк и множество логических значений ("истина" и "ложь") также образуют типы. Если имеются два типа а и г, то множество всех упорядоченных пар, первый член которых имеет тип а, а второй - тип г, является типом. Более того, множество всех функций, отображающих значения одного типа в значения другого типа, также образуют тип. В дополнение к этим и другим определенным в языке типам ML позволяет программисту определить свои собственные типы; к более подробному обсуждению этой возможности мы обратимся позднее. Выражения в ML изображают значения точно так же, как последовательности цифр изображают числа. Тип выражения определяется системой правил, которые гарантируют, что если выражение имеет значение, то значение выражения принадлежит типу выражения (ну как, понятно?). Например, каждая последовательность цифр имеет тип int, поскольку значением последовательности цифр является целое число. Мы проиллюстрируем систему типов ML примерами. 2.2.1Тип unit Тип unit состоит из единственного значения, записываемого как (). Этот тип используется в тех случаях, когда выражение не имеет какого-либо осмысленного значения, а также вместо аргумента функции в тех случаях, когда функция не должна иметь аргументов2. 2.2.2Логические значения (тип bool) Тип bool состоит из значений true и false. Для работы со значениями этого типа имеются одноместная операция not и две двухместных операции andalso и orelse (соответствующие обычным логическим операциям "не", "и" и "или")3. Условное выражение if е then ei else в2 мы также рассмотрим здесь, поскольку его первый аргумент, е, должен иметь тип bool. Обратите внимание, что часть else должна присутствовать обязательно. Причина этого в том, что if в ML является условным выражением, а не условным утверждением, как, например, в Pascalе. Если бы часть "Иногда возникает необходимость рассматривать функции, принимающие постоянные (не зависящие от аргумента) значения. Поскольку зачастую в таких случаях область определения несущественна, уместно в качестве нее использовать unit. При этом в ML важно отличать саму функцию (что записывается как f) от результата ее применения (что записывается как f ()). (Прим. перев.) 3Имеются веские причины, по которым вместо традиционных названий and и or для бинарных логических операций используются неожиданные andalso и orelse. Причины этого следующие. ML является строгим языком; это означает, что все аргументы функции вычисляются до вычисления значения функции. Если при этом окажется, что какой-либо аргумент не может быть вычислен (например, в процессе его вычисления возникает зацикливание), то и само значение функции не сможет быть вычислено. Операции же andalso и orelse являются исключениями из этого правила: при вычислении, например, ei andalsо вг сначала вычисляется ei, и если его значение есть false, то вг не вычисляется, а значением всего выражения будет false. Таким образом, выражение false andalso вг будет всегда определено (и будет иметь значение false) - в отличие, например, от выражения 0 * вг, значение которого будет не определено, если не определено вг. (Прим. перев.) else отсутствовала, то при значении e равном false выражение не имело бы значения. Кроме того, типы выражений ei и e2 должны совпадать. Выражение if true then true else () является некорректным с точки зрения типизации (или, короче, нети-пизируемым), поскольку тип выражения в части then есть bool, а тип выражения в части else - unit. -not true; >false : bool -false andalso true; >false: booi -false orelse true; >true : bool -if false then false else true; >true: bool -if true then false else true; >false: bool 2.2.3 Целые числа (тип int) Тип int является множеством (положительных и отрицательных) целых чисел. Целые числа записываются обычным способом, за исключением того, что для отрицательных чисел знак записывается тильдой вместо традиционного минуса -. >75 : itn >"24 : int -(3+2) div 2; >2 : int -(3+2) mod 2; >1 : int Выражения могут содержать обычные знаки арифметических операций +, -, *, div и mod (div и mod обозначают соответственно целочисленное деление и получение остатка от деления нацело). Имеются и знаки для операций сравнения <, <=, >, >=, = и о. Все эти операции требуют двух аргументов типа int и возвращают результат типа bool (true или false в соответствии с тем, выполнено условие или нет). -3<2 >false : bool |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||