Введение в теорию программирования. Функциональный подход

Базисные типы и стандартные функции языка 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 доступен по адресу:

    Условия и правила использования среды разработки приложений Microsoft Visual Studio .NET доступны по адресу:

    Описание основных функций языка программирования SML доступно по адресу:

    Теоретические сведения

    Первые реализации языка 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 в соответствии с вариантом исполнения.

    Варианты заданий

  • Реализовать функцию вычисления суммы двух целых чисел.
  • Реализовать функцию вычисления разности двух целых чисел.
  • Реализовать функцию вычисления произведения двух целых чисел.
  • Реализовать функцию вычисления частного двух целых чисел.
  • Реализовать функцию вычисления суммы двух вещественных чисел.
  • Реализовать функцию вычисления разности двух вещественных чисел.
  • Реализовать функцию вычисления произведения двух вещественных чисел.
  • Реализовать функцию вычисления частного двух вещественных чисел.
  • Реализовать функцию возведения целого числа в квадрат целого числа в квадрат.
  • Реализовать функцию возведения в квадрат суммы двух целых чисел.
  • Реализовать функцию возведения в квадрат разности двух целых чисел.
  • Реализовать функцию возведения в квадрат произведения двух целых чисел.
  • Реализовать функцию возведения в квадрат частного двух целых чисел.
  • Реализовать функцию возведения в квадрат суммы двух вещественных чисел.
  • Реализовать функцию возведения в квадрат разности двух вещественных чисел.
  • Реализовать функцию возведения в квадрат произведения двух вещественных чисел.
  • Реализовать функцию возведения в квадрат частного двух вещественных чисел.
  • Реализовать функцию возведения в куб целого числа.
  • Реализовать функцию возведения в куб суммы двух целых чисел.
  • Реализовать функцию возведения в куб разности двух целых чисел.
  • Реализовать функцию возведения в куб произведения двух целых чисел.
  • Реализовать функцию возведения в куб частного двух целых чисел.
  • Реализовать функцию возведения в куб суммы двух вещественных чисел.
  • Реализовать функцию возведения в куб разности двух вещественных чисел.
  • Реализовать функцию возведения в куб частного двух вещественных чисел.
  • Вернуться к учебному плану