Основы работы с интерпретатором GHCi

Для выполнения лабораторных работ используется дистрибутив Haskell Platform, включающий в себя компилятор GHC, интерактивную среду GHCi и большое количество других программных средств. Скачать Haskell Platform можно по адресу http://www.haskell.org/platform/, где представлены версии для Windows, MacOS X и различных дистрибутивов Linux.

Для запуска интерактивной среды необходимо ввести в командной строке (терминале) команду ghci. В операционной системе Windows можно запустить приложение WinGHCi. В результате запуска среды на экран будет выведено приглашение Prelude>, после которого можно вводить команды (в данном пособии для простоты будем указывать приглашение ghci>). Здесь Prelude — это название загруженного модуля. В Prelude содержатся основные определения, и он всегда задействуется по умолчанию. При нажатии на клавишу <Enter> будет вычислен результат. Для выхода из интерактивной среды используется команда :quit (или ее сокращенная версия :q).

Основы работы с интерпретатором GHCi - student2.ru

Работа с интерактивной средой ghci

Арифметические операции и стандартные математические функции

Базовая арифметика работает так же, как и во многих других популярных языках: выражения записываются в инфиксной форме, при которой оператор располагается между операндами. Такая форма удобна для записи, однако выражения можно записывать и в префиксной форме, при которой оператор предшествует аргументам. Для использования такой формы записи необходимо заключить оператор в круглые скобки.

ghci> 2 + 2 ghci> (+) 2 2

Для арифметических операций +, -, *, / используется стандартный порядок вычисления. Имеются три операции возведения в степень, каждая из которых принимает по два аргумента: ^ возводит любое число в неотрицательную целую степень, ^^ возводит дробное число в любую целую степень и ** принимает два аргумента с плавающей точкой.

Для целочисленного деления используется функция div, а для получения остатка от деления — функция mod. Также можно использовать стандартные функции sqrt, sin, cos, tan, exp, log (логарифм по основанию e) и многие другие. Функция logBase a x возвращает логарифм числа x по основанию a. Для действительных чисел с плавающей точкой x и y atan2 y x вычисляет угол (от положительной оси X) вектора, проведенного из начала координат в точку (x,y). Эта функциявозвращает значение в диапазоне [-pi, pi] (pi в Haskell возвращает значение числа π).

Операторы и операнды следует разделять пробелами для избежания ошибок при работе, например, с отрицательными числами, которые желательно всегда заключать в круглые скобки. Вообще круглые скобки используются для указания порядка вычислений.

Логические операции

Значениями булевой логики в Haskell являются True и False (регистр при записи имеет значение). При работе используются следующие булевы операции и операции сравнения (для этих операция также можно использовать префиксную форму записи):

● && — логическое “и”;

● || — логическое “или”;

● == — “равно”;

● /= — “неравно”;

● >, < — “больше”, “меньше”;

● >=, <= — “больше или равно”, “меньше или равно”.

Для отрицания выражения используется функция not.

Вызов функций

Вызов функций имеет наивысший приоритет. При вызове функции ее имя и аргументы разделяются пробелами. В отличие от многих других языков программирования, аргументы не заключаются в скобки. Однако скобки в данном случае могут быть использованы для изменения приоритета вычислений.

ghci> min 9 10 ghci> succ 8 ghci> succ 9 * 10 ghci> succ (9 * 10)

Если функция принимает два параметра, мы также можем вызвать ее как инфиксную, если окружим обратными апострофами.

ghci> div 100 11 ghci> 100 `div` 11

Некоторые полезные функции Haskell:

● succ x — следующий за x элемент;

● pred x — предыдущий элемент для x;

● min x y — меньший из двух аргументов;

● max x y — больший из двух аргументов;

● even x — проверка целого числа на четность;

● odd x — проверка целого числа на нечетность;

● gcd x y — наибольший общий делитель чисел x и y;

● lcm x y — наименьшее общее кратное чисел x и y;

● abs x — абсолютная величина числа x;

● signum x — знак числа x;

● ceiling x — наименьшее целое число, которое не меньше x;

● floor x — наибольшее целое число, которое не больше x;

● truncate x — ближайшее к x целое число, которое находится между 0 и x включительно;

● round x — ближайшее к x целое число, результат округляется в сторону четного числа, если x находится на одинаковом расстоянии от двух целых чисел.

Содержание отчета

1. Титульный лист с указанием названия лабораторной работы.

2. Цель работы.

3. Номер варианта.

4. Задание.

5. Текст разработанных команд и ответы, выданные средой (в виде снимков экрана).

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

Необходимо записать команды на Haskell для вычисления соответствующих выражений. В каждом задании необходимо привести два варианта команды: с использованием инфиксной и префиксной форм записи бинарных операций и функций.

Вариант 1

1. Основы работы с интерпретатором GHCi - student2.ru (ответ: 8.658305239407206e35).

2. Основы работы с интерпретатором GHCi - student2.ru (ответ: -9.694444444444445).

3. max(12, min(ceiling(17.5), 17)).

Вариант 2

1. Основы работы с интерпретатором GHCi - student2.ru (ответ: 981342.4916555113).

2. Основы работы с интерпретатором GHCi - student2.ru (ответ: -1.8190442509267521).

3. gcd(18, lcm(15, round(16.3))).

Вариант 3

1. Основы работы с интерпретатором GHCi - student2.ru (ответ: -22.207090776457232).

2. Основы работы с интерпретатором GHCi - student2.ru (ответ: 2.5576143490485883).

3. truncate(max(77, min(78, 123.18))).

Вариант 4

1. Основы работы с интерпретатором GHCi - student2.ru (ответ: -2.2746034309974444e14).

2. Основы работы с интерпретатором GHCi - student2.ru (ответ: 121.48561581763624).

3. gcd(succ(83), max(pred(13), 15)).

Вариант 5

1. Основы работы с интерпретатором GHCi - student2.ru (ответ: 144.34404378144984).

2. Основы работы с интерпретатором GHCi - student2.ru (ответ: 23.99578935896974).

3. min(signum(-78), lcm(18, floor(12.8))).

Вариант 6

1. Основы работы с интерпретатором GHCi - student2.ru (ответ: -5.773248878039994e7).

2. Основы работы с интерпретатором GHCi - student2.ru (ответ: 21.222274193090694).

3. max(abs(-333) , succ(min(18, pred(26)))).

Контрольные вопросы

1. Какие существуют формы записи бинарных операторов в Haskell?

2. Операторы и функции для работы с логическими выражениями.

3. Какой приоритет имеет вызов функций на Haskell?

4. Каким образом производится вызов функций на Haskell?

5. Префиксная форма вызова бинарных функций.

6. Базовые функции языка Haskell.

Лабораторная работа №2.
Определение пользовательских функций

Цели работы

Изучение формата определения пользовательских функций. Изучение базовых конструкций языка if-then-else и case.

Наши рекомендации