Понятие структуры. Списки, последовательность. Операции над списками

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Структуры – объекты, которые состоят из нескольких компонент, которые, в свою очередь, могут быть структурами. Например дата (день, месяц, год). Для того, чтобы определить компоненты, требуется выбрать функтор – дата. Все структуры можно изображать в виде деревьев, где корень – функтор, а ветви – аргументы).  

Списки – последовательность, составленная из произвольного числа элементов, которые разделяются запятыми и заключаются в квадратные скобки. [а,б,в.г], [1,2,3], [“Петров”, “Иванов”]. Объектом в списке может быть всё, что угодно, включая список. Однако все элементы списка должны относиться к одной и той же области определения, и в программе должны присутствовать объявления области определения объектов следующего типа:

DOMAINS

тип_списка = тип_объектов* (в списке м.б. 0 и > элементов)

тип_объектов = ….  

Для списка возможны 2 случая:

  1. пустой список – список заканчивается как атом []
  2. непустой список – список рассматривается как структура, состоящая из 2 частей: головы (первый элемент) и хвоста, которые соединяются межу собой |

Операции над списками:

  1. принадлежность к списку: принадлежит (X,L). Х – голова L, X – хвост L. Это можно записать в виде двух предложений, первое из которых есть простой факт, а второе – правило.

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

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

  1. Конкатенация (сцепление) – для сцепления списков определим отношение конкат (L1, L2,L3). Если L1 – пуст, то L2 и  L3 один и тот же список. Если L1 не пуст, то он имеет голову и хвост [X|L1].

 


konkat([],L,L).

konkat([X|L1],L2,[X|L3]):-konkat(L1,L2,L3).

При помощи данной программы можно разбивать списки. Например в цели задать konkat(L1,L2,[а, б, в).

  1. Добавление элемента – самое простое – вставить в голову. dob(X,L,[X|L]).
  2. Удаление элемента. Удалить (X, L, L1). Если Х – голова, то результат удаления – хвост. Если Х в хвосте, то удаляем оттуда.

del(X,[X|Xvost],Xvost).

del(X,[Y|Xvost],[Y|Xvost1]):-del(X,Xvost,Xvost1).

  1. Подсписок – S является подсписком L, если L – можно разбить на 2 списка L1 и L2, и L2 тоже можно разбить на 2 списка – S и L3.

podspisok(S,L):- konkat(L1,L2,L), konkat(S,L3,L2).

  1. Перестановки – определим отношение перестановка с двумя аргументами (2 списка, один из которых является перестановкой другого). Если 1 список пуст, то и 2 пуст. Если 1 список непуст, то он имеет вид  [X|L] и перестановку такого списка можно построить так: вначале получить список L1 – перестановку L, а затем внести Х в произвольную позицию L1. Следовательно, удаляем X из первого списка, переставляем оставшийся список и добавляем X в начало нового списка.

perest([], []).

perest(L,[X|P]):-del(X,L,L1),perest(L1,P).

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.