Основы построения и функционирования интеллектуальных информационных систем. Былкин В.Д - 130 стр.

UptoLike

130
Рассмотрим еще одну рекурсивную процедуру, подсчитывающую количество элементов списка (это
количество программисты обычно называют длиной списка). Словесная формулировка ее будет сле-
дующей:
Длина пустого списка равна нулю, длина непустого списка равна увеличенной на единицу длине
списка, полученного из исходного отбрасыванием первого элемента.
Запись этой процедуры на Прологе следующая:
длина ([ ],0)
длина {[Первый] Остальные ],Длина)
:-длина (Остальные, Длина1),
длина is Длина1+1.
Пример использования:
?- длина ([1,3,5,7,9],L).
Ответ: L=5
Рассмотрим теперь, как же в языке Пролог решаются задачи, требующие перебора
многочисленных вариантов, часто встречающиеся в таких областях применения ЭВМ, как
автоматизация проектирования, анализ фраз на естественном языке, построение экспертных систем и
др.
К одной из разновидностей таких задач относится задача нахождения в графе пути,
соединяющего данные вершины и удовлетворяющего некоторым требованиям. К таким задачам
относится выбор кратчайшего маршрута в транспортной сети. Представителем этого же класса задач
является известная детская задача, формулируемая так: нарисовать домик, не отрывая карандаша от
бумаги и не проводя два раза по одной и той же линии.
В более серьезной формулировке она читается так: «обойти все ребра графа, не проходя два раза
по одному ребру, так> чтобы в конце обхода вернуться в ту же точку. Пронумеруем вершины и ребра
графа так, как показано на рис, 8.1. Нам необходимо задать структуру графа, указав, какие вершины
соединены какими ребрами. Это сделаем с помощью отношения «ребро» следующего вида:
Ребро (а, 1,2). Ребро (а, 2, 1).
Ребро (б, 2, 3). Ребро (б, 3, 2).
Ребро (в, 1,3). Ребро ( в , 3» 1),
... и т. п.
Рассмотрим еще одну рекурсивную процедуру, подсчитывающую количество элементов списка (это
количество программисты обычно называют длиной списка). Словесная формулировка ее будет сле-
дующей:
      Длина пустого списка равна нулю, длина непустого списка равна увеличенной на единицу длине
списка, полученного из исходного отбрасыванием первого элемента.
      Запись этой процедуры на Прологе следующая:
      длина ([ ],0)
      длина {[Первый] Остальные ],Длина)
      :-длина (Остальные, Длина1),
      длина is Длина1+1.
      Пример использования:
      ?- длина ([1,3,5,7,9],L).
      Ответ: L=5
      Рассмотрим теперь, как же в языке Пролог решаются задачи, требующие перебора
многочисленных вариантов, часто встречающиеся в таких областях применения ЭВМ, как
автоматизация проектирования, анализ фраз на естественном языке, построение экспертных систем и
др.
      К одной из разновидностей таких задач относится задача нахождения в графе пути,
соединяющего данные вершины и удовлетворяющего некоторым требованиям. К таким задачам
относится выбор кратчайшего маршрута в транспортной сети. Представителем этого же класса задач
является известная детская задача, формулируемая так: нарисовать домик, не отрывая карандаша от
бумаги и не проводя два раза по одной и той же линии.
      В более серьезной формулировке она читается так: «обойти все ребра графа, не проходя два раза
по одному ребру, так> чтобы в конце обхода вернуться в ту же точку. Пронумеруем вершины и ребра
графа так, как показано на рис, 8.1. Нам необходимо задать структуру графа, указав, какие вершины
соединены какими ребрами. Это сделаем с помощью отношения «ребро» следующего вида:
      Ребро (а, 1,2).   Ребро (а, 2, 1).
      Ребро (б, 2, 3). Ребро (б, 3, 2).
      Ребро (в, 1,3). Ребро ( в , 3» 1),
      ... и т. п.




                                                130