5.2.2. Процедура проверки принадлежности списку, дающая единственное решение

5.2.2. Процедура проверки принадлежности списку, дающая единственное решение

Для того, чтобы узнать, принадлежит ли X списку L, мы пользовались отношением

принадлежит( X, L)

Программа была следующей:

принадлежит( X, [X | L] ).

принадлежит X, [Y | L] ) :- принадлежит( X, L).

Эта программа дает "недетерминированный" ответ: если X встречается в списке несколько раз, то будет найдено каждое его вхождение. Исправить этот недостаток не трудно: нужно только предотвратить дальнейший перебор сразу же после того, как будет найден первый X, а это произойдет, как только в первом предложении наступит успех. Измененная программа выглядит так:

принадлежит( X, [X | L] ) :- !.

принадлежит( X, [Y | L] ) :- принадлежит( X, L).

Эта программа породит только одно решение. Например:

?- принадлежит( X, [а, b, с] ).

X = а;

nо    (нет)

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Перемещение по связанному списку

Из книги автора

Перемещение по связанному списку Перемещение по связанному списку выполняется последовательно (линейно). После того как просмотрен текущий элемент, выполнятся разыменование его указателя next, что позволяет обратиться к следующему за ним элементу и т.д. Это самый простой


17.5.4. Проверки

Из книги автора

17.5.4. Проверки Документация, поставляемая вместе с ядром, советует после завершения конфигурации выполнить два действия: 1. Заглянуть в файл Makefile, чтобы вручную поправить некоторые значения. 2. Дать команду make dep для установки зависимостей.Конечно, для ручной правки файла


Развернутая процедура

Из книги автора

Развернутая процедура 1. Скачайте ISO-файл AsteriskNOW (http://www.asterisknow.org/ downloads) и создайте из него CD-образ. Этот шаг необходим для того, чтобы можно было начать установку. Процесс создания CD-обра- за может быть различным в зависимости от используемого ПО для записи CD.2. Вставьте


П2.4.1. Запрет доступа к сайту (или к списку сайтов)

Из книги автора

П2.4.1. Запрет доступа к сайту (или к списку сайтов) Предположим, что вам нужно запретить доступ к определенному сайту (или к списку сайтов). Для этого зайдите в раздел Биллинг | Клиенты | Фильтры | До группы (рис. П2.10). Выполните команду меню Действие | Добавить. Рис. П2.10.


6.2.4. Проверка принадлежности диапазону

Из книги автора

6.2.4. Проверка принадлежности диапазону Зачем нужен диапазон, если нельзя проверить, принадлежит ли ему конкретный объект? Эта задача легко решается с помощью метода include?:r1 = 23456..34567x = 14142y = 31416r1.include?(x) # falser1.include?(у) # trueУ этого метода есть также синоним member?.А как он работает?


Выполнение проверки

Из книги автора

Выполнение проверки В первую очередь используются переключатели -v[alidate] и -f[ull] утилиты gfix для проверки структур записей и страниц. Процесс проверки сообщает о разрушенных структурах и освобождает неназначенные фрагменты записей или "осиротевших страниц" (т. е. страниц,


3.3. Процедура выгрузки.

Из книги автора

3.3. Процедура выгрузки. У нас она реализуется функцией OnUnload. Эта функция производит действия, обратные процедуре инициализации по отношению к связанным объектам: она удаляет символическую связь (вызов IoDeleteSymbolicLink()), и затем логическое устройство, сопоставленное драйверу


3.3.1 Проверки

Из книги автора

3.3.1 Проверки Проверка значения может осуществляться или оператором if, или оператором switch:if ( выражение ) оператор if ( выражение ) оператор else оператор switch ( выражение ) операторВ С++ нет отдельного булевского типа. Операции сравнения== != « „= “ »=возвращают целое 1, если


3.2.1. Принадлежность к списку

Из книги автора

3.2.1. Принадлежность к списку Мы представим отношение принадлежности какпринадлежит( X, L)где X — объект, а L — список. Цель принадлежит( X, L) истинна, если элемент X встречается в L. Например, верно чтопринадлежит( b, [а, b, с] )и, наоборот, не верно, чтопринадлежит b, [а, [b, с] ]


5.2.3. Добавление элемента к списку, если он в нем отсутствует (добавление без дублирования)

Из книги автора

5.2.3. Добавление элемента к списку, если он в нем отсутствует (добавление без дублирования) Часто требуется добавлять элемент X в список L только в том случае, когда в списке еще нет такого элемента. Если же X уже есть в L, тогда L необходимо оставить без изменения, поскольку


14.5.4. Процедура  выдать

Из книги автора

14.5.4. Процедура  выдать Процедуравыдать( Ответ)приведенная на рис. 14.12, показывает пользователю окончательный результат консультационного сеанса и дает объяснения типа "как". Ответ включает в себя как ответ на вопрос пользователя, так и дерево вывода, демонстрирующее


5.3.3 Процедура оценивания

Из книги автора

5.3.3 Процедура оценивания Последняя, стадия модели процесса оценивания уточняется по трем этапам, называемым «измерение», «ранжирование» и


Василий Щепетнёв: Длань дающая

Из книги автора

Василий Щепетнёв: Длань дающая Издавна заведено: врагов своих нужно всячески утеснять, а друзей и сподвижников поощрять. Проблема в том, что утеснение есть дело прибыльное, а поощрение — затратное. Отобрать у врага поместье, компанию или хотя бы золотой зуб не только


Процедура проверки валидности пути

Из книги автора

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