Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 09.01.2004 | Доступ: свободный | Студентов: 3807 / 327 | Оценка: 4.02 / 3.77 | Длительность: 10:03:00
ISBN: 978-5-9556-0009-3
Самостоятельная работа 1:

Базисные типы и стандартные функции языка SML

< Лекция 5 || Самостоятельная работа 1 || Лекция 6 >
Аннотация: Цель: ознакомиться с ядром языка SML, стандартным набором функций, принципами построения функций и типов.

Введение

Целью лабораторных работ является иллюстрация практических навыков прикладного программирования на основе теоретической части курса, а также знакомство с платформой Microsoft .NET.

Для выполнения работ в рамках раздела необходимо следующее программное обеспечение:

  1. 32-разрядная операционная система Microsoft Windows 98, ME, 2000, XP, 2003.
  2. Интегрированная среда разработки Microsoft Visual Studio .NET
  3. Компилятор SML.NET.

Код SML.NET может быть также откомпилирован на следующем программном обеспечении:

  1. 32-разрядная операционная система Microsoft Windows 98, ME или 2000, XP, 2003.
  2. Платформа разработки Microsoft.NET Framework SDK или Microsoft.NET Framework Redistr.
  3. Компилятор 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 Тип 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 в соответствии с вариантом исполнения.

Варианты заданий
  1. Реализовать функцию вычисления суммы двух целых чисел.
  2. Реализовать функцию вычисления разности двух целых чисел.
  3. Реализовать функцию вычисления произведения двух целых чисел.
  4. Реализовать функцию вычисления частного двух целых чисел.
  5. Реализовать функцию вычисления суммы двух вещественных чисел.
  6. Реализовать функцию вычисления разности двух вещественных чисел.
  7. Реализовать функцию вычисления произведения двух вещественных чисел.
  8. Реализовать функцию вычисления частного двух вещественных чисел.
  9. Реализовать функцию возведения целого числа в квадрат целого числа в квадрат.
  10. Реализовать функцию возведения в квадрат суммы двух целых чисел.
  11. Реализовать функцию возведения в квадрат разности двух целых чисел.
  12. Реализовать функцию возведения в квадрат произведения двух целых чисел.
  13. Реализовать функцию возведения в квадрат частного двух целых чисел.
  14. Реализовать функцию возведения в квадрат суммы двух вещественных чисел.
  15. Реализовать функцию возведения в квадрат разности двух вещественных чисел.
  16. Реализовать функцию возведения в квадрат произведения двух вещественных чисел.
  17. Реализовать функцию возведения в квадрат частного двух вещественных чисел.
  18. Реализовать функцию возведения в куб целого числа.
  19. Реализовать функцию возведения в куб суммы двух целых чисел.
  20. Реализовать функцию возведения в куб разности двух целых чисел.
  21. Реализовать функцию возведения в куб произведения двух целых чисел.
  22. Реализовать функцию возведения в куб частного двух целых чисел.
  23. Реализовать функцию возведения в куб суммы двух вещественных чисел.
  24. Реализовать функцию возведения в куб разности двух вещественных чисел.
  25. Реализовать функцию возведения в куб частного двух вещественных чисел.
< Лекция 5 || Самостоятельная работа 1 || Лекция 6 >