Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
27.05.2015
Размер:
52.74 Кб
Скачать

Лабораторная работа №2. Сессии и скрипты. "Literate style". Булевы функции.

Теория.

В ФП все множество величин разделяется на организованные группы, называемые типами. Базовыми типами являются: Char (символы), Int (целые от -2^31 до 2^31-1), Integer (целые), Float (дробные числа), Double и Bool (логические величины).

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

Булевы функции.

На множестве величин типа Bool определены стандартные логические операции:

  • отрицание, задаваемое функцией not,

  • конъюнкция (логическое умножение), задаваемое оператором &&,

  • дизъюнкция (логическое сложение) - ||.

Эти операции перечислены в порядке убывания приоритета. Как обычно, для изменения порядка вычислений используются скобки.

Пример.

True && False

False

 False || True

True

 not False

True

 not False && False

False

 not (False && False)

True

Пример.

Определение функции эквивалентной стандартному отрицанию.

myNot :: Bool -> Boll

myNot True = False

myNot False = True

Результат применения созданной функции.

  • 3 == 56-53

True

  • myNot (3 == 56-53)

False

Обратите внимание, что без скобок была бы ошибка!

«Literate style».

Основная концепция этого понятия – самодокументирование программ. Для однострочных комментариев используется комбинация символов --. А для многосторчных применяется такая: {-…-}. Допускаются также и вложенные комментарии.

Программы на языке Haskell, написанные в таком стиле должны сохраняться в файлах с расширением lhs. Код, размещаемый в таком файле, должен отделяться от остального текста пустыми строками и в первой позиции строки содержать символ >, после которого обязательно следует пробел.

Пример. Поместите следующий текст в файл sq.lhs, внимательно следя за размещением двух строк кода:

Функция squareNew, определенная на множестве целых чисел, возвращает квадрат своего аргумента.

> squareNew :: Integer -> Integer

> squareNew (x) = x*x

Здесь использована другая форма вызова функции: аргумент заключен в круглые скобки. Для функций одной переменной допустимы обе формы вызова, например, squareNew (123) и squareNew 123.

Задания.

Создайте самодокументирующийся файл, содержащий программу для решения задач вашего варианта. Следует понимать «и» как логическое умножение, а «или» как логическое сложение.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не (А и В);

    2. Не А или В;

    3. А или не В.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не (А или В);

    2. Не А и В;

    3. А и не В.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не А или не В;

    2. А и (А или не В);

    3. (не А или В) и В.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не А и не В;

    2. А или (не А и В);

    3. (не А и В) или В.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не А и не В или А;

    2. В или не А и не В;

    3. В и не (А и не В).

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не (А и не В) или А;

    2. В и не А или не В;

    3. Не В и не А или В.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не (не А и не В) и А;

    2. Не (не А или не В) или А;

    3. Не (не А или не В) и В.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не (не А или В) или не А;

    2. Не (не А и не В) и А;

    3. Не (А или не В) или не В.

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не (А и В) или В;

    2. Не А или В или (В и не А);

    3. А или (не В и А).

  1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:

    1. Не (А и не В) или В и А;

    2. А или В и (В и не А);

    3. А и (не В или не А).

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

  1. приведите причины, по которым следует придерживаться строгой типизации.

  2. каково назначение файла Prelude.hs?

  3. что такое сессия в Haskell?

  4. что такое скрипт в Haskell?

  5. какой модуль загружается по умолчанию при запуске Hugs?

  6. какие виды вычислений вы знаете? Какие используются в Haskell?

  7. какие стратегии вычислений вы знаете? Какие используются в Haskell?

  8. что такое строгая функция? Приведите примеры.

  9. какие базовые типы переменных в Haskell?

  10. что такое «Literate style»? Для чего он используется?

  11. чем отличаются префиксная и инфиксная запись?

  12. при какой записи функция используется в качестве оператора? Как тогда ее записывать?

3

Соседние файлы в папке То что скидывала Даша