Армения, Степанакерт |
Базисные типы и стандартные функции языка SML
Введение
Целью лабораторных работ является иллюстрация практических навыков прикладного программирования на основе теоретической части курса, а также знакомство с платформой Microsoft .NET.
Для выполнения работ в рамках раздела необходимо следующее программное обеспечение:
- 32-разрядная операционная система Microsoft Windows 98, ME, 2000, XP, 2003.
- Интегрированная среда разработки Microsoft Visual Studio .NET
- Компилятор SML.NET.
Код SML.NET может быть также откомпилирован на следующем программном обеспечении:
- 32-разрядная операционная система Microsoft Windows 98, ME или 2000, XP, 2003.
- Платформа разработки Microsoft.NET Framework SDK или Microsoft.NET Framework Redistr.
- Компилятор SML.NET.
Компилятор для языка программирования SML в среде Microsoft .NET доступен по адресу: http://www.cl.cam.ac.uk/Research/TSG/SMLNET
Условия и правила использования среды разработки приложений Microsoft Visual Studio .NET доступны по адресу: http://www.msdn.microsoft.com/vstudio/
Описание основных функций языка программирования SML доступно по адресу: http://standardml.org/
Теоретические сведения
Первые реализации языка SML были интерактивными. При запуске компилятора пользователь вводил выражения в режиме командной строки. Введенные SML-выражения компилировались и направлялись на выполнение, и результат отображался на экране компьютера. Ввод очередного выражения был возможен по завершении обработки предыдущего. Современная реализация языка SML в среде вычислений Microsoft .NET позволяет производить компиляцию программ в исполняемые файлы или динамические библиотеки (в формате DLL), а также и создавать тиражируемые компоненты для повторного использования в проектах на других языках. Язык SML в полной мере поддерживает импорт классов .NET.
Функции и типы
Функции в языке SML задаются по аналогии с их математическим представлением. При этом тип может быть задан как в явном виде, например:
fun square(x:int) = x*x
так и опущен (неявно задан на этапе компиляции). Производные типы в языке SML строятся из множества базисных типов. Так, функция с аргументом int и результатом string, будет иметь тип int -> string.
Возможно также задание функции с использованием fn -выражения
val square = fn x => x * x.
Базисные типы и функции языка SML.
- bool — логический тип данных. В модуле bool над ним определены такие операции, как отрицание ( val not: bool -> bool ), преобразование к строковому типу ( val toString: bool -> string ), а также преобразование из строкового типа ( val fromString: string -> bool ).
- word — тип, представляющий из себя целое число без знака, и, как правило, хранящийся в форме машинного представления слова. В соответствующем модуле определены преобразования для данного типа (например, val toInt : word -> int ), а также арифметические (например, val + : word * word -> word ) и логические (например, val > : word * word -> bool ) операции.
- char — символьный тип данных. В модуле char также определены функции преобразования ( val toString : char -> String.string ), логические операции ( val isDigit : char -> bool ) и другие функции.
- real — число с плавающей точкой. В модуле real определены операции преобразования ( val toString : real -> string ), а также сравнения ( val >= : real * real -> bool ), преобразования форматирования и точности ( val maxFinite: real ).
- int — целочисленный тип.
- string — тип символьной строки.
Общее описание типов данных и функций SML.NET хранится в форме файлов с описанием интерфейса в директории \src\basis целевого каталога компилятора.
Типы, объекты и методы .NET
Проиллюстрируем фрагмент отображения типов языка SML.NET в систему типов Common Type System.
Тип .NET | Тип SML.NET |
---|---|
System.Boolean | bool |
System.Byte | Word8.word |
System.Char | char |
System.Double | real |
System.Single | Real32.real |
System.Int32 | int |
System.Int64 | Int64.int |
System.Int16 | Int16.int |
System.Sbyte | Int8.int |
System.String | string |
System.UInt16 | Word16.word |
System.UInt32 | word |
System.UInt64 | Word64.word |
System.Exception | exn |
System.Object | object |
Кроме явного указания типов, в SML.NET предусмотрены средства для ссылки на любой тип иерархии типов .NET. При этом необходимо указывать полное имя объекта, например:
type XMLParser = string -> System.Xml.XmlDocument
Следующая программа иллюстрирует использование типов SML и Common Type System .NET:
structure builtintypes_demo = struct fun main () = ( print ( "cosh(1.2) = " ^ Real.toString( System.Math.Cosh(1.2)) ^ "\n"); print ( "System.Int32.MinValue = " ^ Int.toString( System.Int32.MinValue) ^ "\n"); print (valOf (System.Char.GetUnicodeCategory( #"Z").#ToString())) ) end
Задание
Сформулируйте формальную постановку задачи, запишите правила вывода и реализуйте программу на SML в соответствии с вариантом исполнения.
Варианты заданий
- Реализовать функцию вычисления суммы двух целых чисел.
- Реализовать функцию вычисления разности двух целых чисел.
- Реализовать функцию вычисления произведения двух целых чисел.
- Реализовать функцию вычисления частного двух целых чисел.
- Реализовать функцию вычисления суммы двух вещественных чисел.
- Реализовать функцию вычисления разности двух вещественных чисел.
- Реализовать функцию вычисления произведения двух вещественных чисел.
- Реализовать функцию вычисления частного двух вещественных чисел.
- Реализовать функцию возведения целого числа в квадрат целого числа в квадрат.
- Реализовать функцию возведения в квадрат суммы двух целых чисел.
- Реализовать функцию возведения в квадрат разности двух целых чисел.
- Реализовать функцию возведения в квадрат произведения двух целых чисел.
- Реализовать функцию возведения в квадрат частного двух целых чисел.
- Реализовать функцию возведения в квадрат суммы двух вещественных чисел.
- Реализовать функцию возведения в квадрат разности двух вещественных чисел.
- Реализовать функцию возведения в квадрат произведения двух вещественных чисел.
- Реализовать функцию возведения в квадрат частного двух вещественных чисел.
- Реализовать функцию возведения в куб целого числа.
- Реализовать функцию возведения в куб суммы двух целых чисел.
- Реализовать функцию возведения в куб разности двух целых чисел.
- Реализовать функцию возведения в куб произведения двух целых чисел.
- Реализовать функцию возведения в куб частного двух целых чисел.
- Реализовать функцию возведения в куб суммы двух вещественных чисел.
- Реализовать функцию возведения в куб разности двух вещественных чисел.
- Реализовать функцию возведения в куб частного двух вещественных чисел.