Базисні типи і стандартні функції мови SMLЛабораторна робота 1 Тема: Базисні типи і стандартні функції мови SML Мета: ознайомитися з ядром мови 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://www.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 зберігається у формі файлів з описом інтерфейсу в директорії srcasis цільового каталога компілятора. Типи, об.єкти і методи .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)) ^ | |). print ( |System.Int32.MinValue = | ^ Int.toString( System.Int32.MinValue) ^ | |). print (valOf (System.Char.GetUnicodeCategory( #|Z|).#ToString())) ) end Завдання Сформулюйте формальну постановку завдання, запишіть правила виводу і реалізуйте програму на SML відповідно до варіанту виконання. Варіанти завдань Реалізувати функцію обчислення суми двох цілих чисел. Реалізувати функцію обчислення різниці двох цілих чисел. Реалізувати функцію обчислення добутку двох цілих чисел. Реалізувати функцію обчислення частку ділення двох цілих чисел. Реалізувати функцію обчислення суми двох дійсних чисел. Реалізувати функцію обчислення різниці двох дійсних чисел. Реалізувати функцію обчислення добутку двох дійсних чисел. Реалізувати функцію обчислення частку ділення двох дійсних чисел. Реалізувати функцію піднесення цілого числа до квадрату. Реалізувати функцію піднесення до квадрату суми двох цілих чисел. Реалізувати функцію піднесення до квадрату різниці двох цілих чисел. Реалізувати функцію піднесення до квадрату добутку двох цілих чисел. Реалізувати функцію піднесення до квадрату частки ділення двох цілих чисел. Реалізувати функцію піднесення до квадрату суми двох дійсних чисел. Реалізувати функцію піднесення до квадрату різниці двох дійсних чисел. Реалізувати функцію піднесення до квадрату добутку двох дійсних чисел. Реалізувати функцію піднесення до квадрату частки ділення двох дійсних чисел. Реалізувати функцію піднесення в куб цілого числа. Реалізувати функцію піднесення в куб суми двох цілих чисел. Реалізувати функцію піднесення в куб різниці двох цілих чисел. Реалізувати функцію піднесення в куб добутку двох цілих чисел. Реалізувати функцію піднесення в куб частки ділення двох цілих чисел. Реалізувати функцію піднесення в куб суми двох дійсних чисел. Реалізувати функцію піднесення в куб різниці двох дійсних чисел. Реалізувати функцію піднесення в куб добутку двох дійсних чисел.