Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

ЗАДАНИЕ 4.7



Используйте базу данных из задания 1.6 лабораторной работы 1. Добавьте факты для каждого животного X

животное(X).

Для исключения повторения названия животных на запросы

"Кто живет хотя бы (ровно) в двух средах обитания?"

можно использовать надрез

цель(X):- животное(X),[!живет(X,Y),живет(X,Z),Y\=Z!].

СПИСКИ

ЦЕЛЬ: Знакомство с понятием списка и операциями над списками.

Список

- это упорядоченная последовательность элементов. Элементами списка могут быть любые термы Пролога. Удобной формой записи списков является так называемое списочное обозначение. В данном обозначении каждый элемент списка отделяется от соседнего запятой, а весь набор элементов заключается в квадратные скобки, например, [a,b,c,d].

Фактически список - это структура с функтором ‘ '/2 (точка с арностью 2). Согласно этому определению, список состоит из первого элемента и хвоста, который представляет собой список из остальных элементов.

Пустой список - это список, не содержащий ни одного элемента, он обозначается [].

Примеры.

N элементы списка запись со скобками запись с функтором ‘
  a [a] ’(a, [])
  a b c [a,b,c] ’(a, ‘ ’(b, ‘ ’(c,[])))
  [a] [[a]] ’(‘ ’(a,[]),[])
  [] [[]] ’ ([],[])
  [a] [b,c] [[a],[b,c]] ’(‘ ’(a,[]), ‘ ’(b, ‘ ’(c,[])))

Список унифицируется с другим списком, если попарно унифицируются их элементы.

Список может делиться на "голову" и "хвост" с помощью операции отделения головы, которая обозначается вертикальной чертой (|), т.е. [Голова|Хвост]. Голова - фиксированное количество элементов. Хвост - список из оставшихся элементов списка. Чаще всего используется голова, состоящая из одного элемента.

В виде дерева список [X|Y] изображается следующим образом:

Примеры сопоставления списков со списком [Голова|Хвост]

N Список Голова Хвост
  [a] a []
  [a,b,c] a [b,c]
  [[a]] [a] []
  [] не сопоставляется не сопоставляется
  [a|[c,d]] a [c,d]

Список [1,2|[3,4]] равен списку [1,2,3,4]. При сопоставлении со списком [X,Y|Z] получим X=1, Y = 2 и Z = [3,4].

В SWI/PROLOG имеется особый вид списков - символьные списки. Символьный список - это фактически последовательность целых чисел, соответствующих ASCII-коду символов. Символьные списки заключаются в двойные кавычки. Следующие три списка являются сопоставимыми:

"abc" [ 97, 98, 99 ] '.'(97,'.'(98,'.'(99),[])))

ПРОГРАММА 1 Разделение списка на голову и хвост.

write_list([]).

write_list([H|T]):- /* разделение списка на голову и хвост, */

write(H), nl, /* печать головы, пропуск строки */

write_list(T)./*рекурсивный вызов предиката от оставшегося списка*/





Дата публикования: 2014-12-11; Прочитано: 275 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...