Книга: Программирование на языке Пролог для искусственного интеллекта
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о
- Офисные принадлежности
- Решение
- 4.14. Запрет и разрешение хостов
- Решение проблем при работе в Почте Windows
- Решение проблем при работе Проигрывателя Windows Media
- Общее решение
- Разрешение трассировки с помощью ‹trace›
- Более приемлемое решение
- 7.2. Операции проверки файлов
- Почему у разных компаний цена за продвижение по одному и тому же списку ключевых слов разная?