Шаг 128.
Основы языка Haskell. Абстрактные типы данных (АТД). Ассоциативные списки на базе списка пар. Задачи для самостоятельного решения

    На этом шаге мы приведем задачи для самостоятельного решения.


   Замечание. Найдите ошибки, описки, неточности и прочие изъяны в приведенных задачах.

1. Поиск и подсчёт элементов с заданными свойствами

    1*. Напишите функцию, возвращающую последнюю пару элементов ассоциативного списка.

    2*. Напишите функцию, возвращающую n(n∈N) пару элементов ассоциативного списка.

    3. Напишите функцию, возвращающую пару элементов ассоциативного списка, которая встречается непосредственно перед указанной.

    4*. Напишите функцию, возвращающую по ассоциативному списку первую пару элементов, у которой ключ имеет отрицательное значение.

    5*. Напишите функцию, возвращающую по ассоциативному списку последнее вхождение пары элементов, данное ключа которой представляет собой число 1.0.

    6*. Напишите функцию, возвращающую количество пар элементов, имеющих одинаковые данные.

    7*. Напишите функцию, возвращающую количество вхождений первой пары элементов в ассоциативный список.

    8. Напишите функцию, возвращающую количество одинаковых пар элементов в ассоциативном списке.

    9. Напишите функцию, возвращающую количество различных пар элементов в ассоциативном списке.

    10. Напишите функцию, возвращающую номер чаще всего встречающейся точечной пары в заданном ассоциативном списке.

2. Предикаты над ассоциативными списками

    1*. Напишите функцию, определяющую, совпадают ли первая и последняя пары элементов ассоциативного списка.

    2*. Напишите функцию, определяющую, совпадают ли n-ая (n∈N) и m-ая (m∈N) пары элементов ассоциативного списка.

    3*. Напишите функцию, определяющую, упорядочены ли пары элементов ассоциативного списка по убыванию ключей.

    4*. Напишите функцию, определяющую, упорядочены ли пары элементов ассоциативного списка по возрастанию данных.

    5. Напишите функцию, определяющую, образуют ли ключи ассоциативного списка арифметическую прогрессию.

    6*. Напишите функцию, определяющую, образуют ли данные di (i∈N) ассоциативного списка последовательность, в которой каждый последующий элемент равен 4*di+ 1.

    7*. Напишите функцию, определяющую, имеются ли в ассоциативном списке две одинаковые рядом стоящие пары элементов.

    8. Напишите функцию, определяющую, имеются ли в ассоциативном списке две одинаковые пары элементов.

    9*. Напишите функцию, определяющую, совпадают ли первая точечная пара ассоциативного списка Х и последняя точечная пара ассоциативного списка Y.

    10*. Напишите функцию, определяющую, имеет ли какая-нибудь пара элементов одного ассоциативного списка вхождение в другой ассоциативный список.

3. Преобразование ассоциативных списков

    1*. Напишите функцию, изменяющую порядок следования данных в ассоциативном списке на обратный.

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

    3*. Напишите функцию, меняющую местами данные двух крайних пар элементов ассоциативного списка, если значения их ключей являются чётными числами.

    4*. Напишите функцию, изменяющую данные в ассоциативном списке, увеличивая их на значение соответствующего им ключа.

    5. Напишите функцию, заменяющую данные в ассоциативном списке на 0 в тех парах элементов, значения ключей которых удовлетворяют следующему условию:

   Количество_элементов_в_ассоциативном_списке  ≥ Значение ключа  > 0
    6*. Напишите функцию, осуществляющую циклическую перестановку элементов ассоциативного списка: первая пара должна стать второй, вторая - третьей и т.д., а последняя - первой.

    7*. Напишите функцию, осуществляющую "переворачивание" (реверсирование) заданного ассоциативного списка.

    8. Напишите функцию, осуществляющую перестановку соседних пар элементов ассоциативного списка. Например:

   [(1,2.3),(4,5.6)]         -> [(4,5.6),(1,2.3)],

   [(1,2.3),(4,5.6),(2,3.0)] -> [(4,5.6),(1,2.3),(2,3.0)].
    9. Напишите функцию, осуществляющую перестановку элементов (k,d) ассоциативного списка таким образом, чтобы сначала располагались пары элементов (ki < 0, di < 0), затем - (kj < 0, dj > 0), затем (km ≥ 0, dm < 0) и (kn ≥ 0, dn ≥ 0), где i, j, m, n ∈ N.

    10. Напишите функцию, которая переставляет элементы ассоциативного списка так, чтобы одинаковые точечные пары стали соседями.

4. Конструирование ассоциативных списков из заданных ассоциативных списков

    1*. Напишите функцию, "обрывающую" ассоциативный список, если он состоит более чем из n ∈ N пар элементов.

    2*. Напишите функцию, возвращающую ассоциативный список, содержащий n ∈ N последних пар элементов ассоциативного списка.

    3. Напишите функцию, добавляющую заданную пару элементов на n(n ∈ N) место в ассоциативный список.

    4. Напишите функцию, добавляющую m-ую пару элементов на n-е место в ассоциативный список (n,m ∈ N).

    5*. Напишите функцию, удаляющую из ассоциативного списка все пары элементов: (а) на чётных местах; (б) на нечётных местах.

    6. Напишите функцию, возвращающую ассоциативный список из n ∈ N копий исходного ассоциативного списка.

    7. Напишите функцию, которая по заданному ассоциативному списку возвращает список пар его элементов, числовые значения ключей которых удовлетворяют следующему условию:

   Значение_ключа = Позиция_этого_же_ключа_в_ассоциативном_списке
    8. Напишите функцию, которая по заданному ассоциативному списку возвращает список его пар элементов, данные которых представляют собой числа из (0,1.0).

    9. Напишите функцию, удаляющую из ассоциативного списка повторные вхождения пар элементов.

    10. Напишите функцию, которая по заданному ассоциативному списку возвращает список пар элементов, встречающихся в нём более одного раза.

    На следующем шаге мы рассмотрим метод синтаксически ориентированного конструирования.




Предыдущий шаг Содержание Следующий шаг