Содержание

  1. Факты и правила
    1. Термы
      1. Атомы
      2. Числа
      3. Структуры
    2. Факты
      1. Объявление
      2. Переменные
      3. Запросы
    3. Правила
      1. Объявление
        1. Простые
        2. Конъюнкция
        3. Дизъюнкция
        4. Отрицание
        5. Рекурсия
      2. Запросы
        1. Унификация
        2. Порядок выполнения
        3. Возвраты и отсечения
  2. Вычисления
    1. Операторы и функции
    2. Рекурсивные вычисления
    3. Мемоизация
    4. Обратимые вычисления
  3. Списки
    1. Синтаксис
    2. Сопоставление с образцом
    3. Правила на списках
    4. Правила высшего порядка
  4. Примеры
    1. Задача о расстановке ферзей
    2. Задача Эйнштейна
  5. Объекты
    1. Определение
    2. Наследование
    3. Мультиметоды

Домашнее задание 11. Ассоциативные массивы на Prolog

Ассоциативные массивы на Prolog
  1. Реализуйте ассоциативный массив (map).
  2. Простой вариант. Ассоциативный массив на упорядоченном списке пар ключ-значение.

    Разработайте правила:

    • map_get(ListMap, Key, Value), проверяющее, что дерево содержит заданную пару ключ-значение.
    • map_put(ListMap, Key, Value, Result), добавляющее пару ключ-значение в дерево, или заменяющее текущее значение для ключа;
    • map_remove(ListMap, Key, Result), удаляющее отображение для ключа.

    Правила не должны анализировать хвост списка, если в нем точно нет необходимого ключа.

  3. Сложный вариант. Ассоциативный массив на двоичном дереве.

    Разработайте правила:

    • tree_build(ListMap, TreeMap), строящее дерево из упорядоченного набора пар ключ-значение;
    • map_get(TreeMap, Key, Value).

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

  4. Бонусный вариант. Дополнительно разработайте правила:

    • map_put(TreeMap, Key, Value, Result);
    • map_remove(TreeMap, Key, Result).