close

Вход

Забыли?

вход по аккаунту

?

2

код для вставкиСкачать
Лабораторная работа №2. Начало работы с Hugs. Сессии и скрипты. "Literate style". Двумерный синтаксис. Типы данных.
Теория.
В ФП все множество величин разделяется на организованные группы, называемые типами. Базовыми типами являются: Char (символы), Int (целые от -2^31 до 2^31-1), Integer (целые), Float (дробные числа), Double и Bool (логические величины). Каждый тип ассоциируется с определенным набором операций, которые могут не иметь смысла для других типов. Например, нельзя делить логические величины или не перемножить две функции.
"Literate style". Основная концепция этого понятия - самодокументирование программ. Для однострочных комментариев используется комбинация символов --. А для многосторчных применяется такая: {-...-}. Допускаются также и вложенные комментарии.
Программы на языке Haskell, написанные в таком стиле должны сохраняться в файлах с расширением lhs. Код, размещаемый в таком файле, должен отделяться от остального текста пустыми строками и в первой позиции строки содержать символ >, после которого обязательно следует пробел.
Пример.
Поместите следующий текст в файл sq.lhs, внимательно следя за размещением двух строк кода:
Функция squareNew, определенная на множестве целых чисел, возвращает квадрат своего аргумента.
> squareNew :: Integer -> Integer
> squareNew (x) = x*x
Здесь использована другая форма вызова функции: аргумент заключен в круглые скобки. Для функций одной переменной допустимы обе формы вызова, например, squareNew (123) и squareNew 123.
Булевы функции.
Пример определения функции эквивалентной стандартному отрицанию.
myNot :: Bool -> Boll
myNot True = False
myNot False = True
Результат применения созданной функции.
==> 3 == 56-53
True
==> myNot (3 == 56-53)
False
Обратите внимание, что без скобок была бы ошибка!
Задания.
Создайте самодокументирующийся файл, содержащий программу для решения задач вашего варианта. Следует понимать "и" как логическое умножение, а "или" как логическое сложение.
1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не (А и В);
2) Не А или В;
3) А или не В.
2. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не (А или В);
2) Не А и В;
3) А и не В.
3. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не А или не В;
2) А и (А или не В);
3) (не А или В) и В.
4. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не А и не В;
2) А или (не А и В);
3) (не А и В) или В.
5. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не А и не В или А;
2) В или не А и не В;
3) В и не (А и не В).
6. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не (А и не В) или А;
2) В и не А или не В;
3) Не В и не А или В.
7. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не (не А и не В) и А;
2) Не (не А или не В) или А;
3) Не (не А или не В) и В.
8. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не (не А или В) или не А;
2) Не (не А и не В) и А;
3) Не (А или не В) или не В.
9. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не (А и В) или В;
2) Не А или В или (В и не А);
3) А или (не В и А).
10. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1) Не (А и не В) или В и А;
2) А или В и (В и не А);
3) А и (не В или не А).
Вопросы для самоконтроля
1. приведите причины, по которым следует придерживаться строгой типизации.
2. каково назначение файла Prelude.hs?
3. что такое сессия в Haskell?
4. что такое скрипт в Haskell?
5. какой модуль загружается по умолчанию при запуске Hugs?
6. какие виды вычислений вы знаете? Какие используются в Haskell?
7. какие стратегии вычислений вы знаете? Какие используются в Haskell?
8. что такое строгая функция? Приведите примеры.
9. чем отличаются префиксная и инфиксная запись?
10. при какой записи функция используется в качестве оператора? Как тогда ее записывать?
1
Документ
Категория
Рефераты
Просмотров
32
Размер файла
276 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа