ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 128
- 129
- 130
- 131
- 132
- …
- следующая ›
- последняя »
