🗊Презентация Списки в языке Пролог

Нажмите для полного просмотра!
Списки в языке Пролог, слайд №1Списки в языке Пролог, слайд №2Списки в языке Пролог, слайд №3Списки в языке Пролог, слайд №4Списки в языке Пролог, слайд №5Списки в языке Пролог, слайд №6Списки в языке Пролог, слайд №7Списки в языке Пролог, слайд №8Списки в языке Пролог, слайд №9Списки в языке Пролог, слайд №10Списки в языке Пролог, слайд №11Списки в языке Пролог, слайд №12Списки в языке Пролог, слайд №13Списки в языке Пролог, слайд №14Списки в языке Пролог, слайд №15Списки в языке Пролог, слайд №16Списки в языке Пролог, слайд №17Списки в языке Пролог, слайд №18Списки в языке Пролог, слайд №19Списки в языке Пролог, слайд №20Списки в языке Пролог, слайд №21Списки в языке Пролог, слайд №22Списки в языке Пролог, слайд №23Списки в языке Пролог, слайд №24Списки в языке Пролог, слайд №25Списки в языке Пролог, слайд №26Списки в языке Пролог, слайд №27Списки в языке Пролог, слайд №28Списки в языке Пролог, слайд №29Списки в языке Пролог, слайд №30Списки в языке Пролог, слайд №31Списки в языке Пролог, слайд №32Списки в языке Пролог, слайд №33

Содержание

Вы можете ознакомиться и скачать презентацию на тему Списки в языке Пролог. Доклад-сообщение содержит 33 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Списки в языке Пролог
Описание слайда:
Списки в языке Пролог

Слайд 2





Определение
Список — упорядоченное множество объектов одинакового типа. 
Формально это определение соответствует определению массива в традиционных языках программирования. Однако в списке не оговаривается ни размерность, ни число элементов. 
 Список - упорядоченная последовательность элементов произвольной длины.
Список задается перечислением элементов списка через запятую в квадратных скобках.
Описание слайда:
Определение Список — упорядоченное множество объектов одинакового типа. Формально это определение соответствует определению массива в традиционных языках программирования. Однако в списке не оговаривается ни размерность, ни число элементов. Список - упорядоченная последовательность элементов произвольной длины. Список задается перечислением элементов списка через запятую в квадратных скобках.

Слайд 3





Примеры записи списков
[monday, tuesday, wednesday, thursday, friday, saturday, sunday] — список, элементами которого являются английские названия дней недели;
["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"] —элементами списка являются русские названия дней недели;
[1, 2, 3, 4, 5, 6, 7] —элементами списка являются номера дней недели;
['п', 'в', 'с', 'ч', 'п', 'с', 'в'] —элементами списка являются первые символы русских названий дней недели;
[ ]   -  пустой список; 
[1 , 7, 3 , 50] – список  целых чисел; 
[‘1’ , ‘7’, ‘3’ , ‘d’] – список символов.
Описание слайда:
Примеры записи списков [monday, tuesday, wednesday, thursday, friday, saturday, sunday] — список, элементами которого являются английские названия дней недели; ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"] —элементами списка являются русские названия дней недели; [1, 2, 3, 4, 5, 6, 7] —элементами списка являются номера дней недели; ['п', 'в', 'с', 'ч', 'п', 'с', 'в'] —элементами списка являются первые символы русских названий дней недели; [ ]   -  пустой список; [1 , 7, 3 , 50] – список целых чисел; [‘1’ , ‘7’, ‘3’ , ‘d’] – список символов.

Слайд 4





Примеры записи списков
Элементы списка могут быть любыми, в том числе и составными объектами. В частности, элементы списка сами могут быть списками.
Например, 
[[1,3,7],[],[5,2,94],[–5,13]]
Описание слайда:
Примеры записи списков Элементы списка могут быть любыми, в том числе и составными объектами. В частности, элементы списка сами могут быть списками. Например, [[1,3,7],[],[5,2,94],[–5,13]]

Слайд 5





Описание списков в программе
В разделе описания доменов списки описываются следующим образом:
DOMAINS 
<имя спискового домена>=<имя домена элементов списка>* 
Звездочка после имени домена указывает на то, что описывается список, состоящий из объектов соответствующего типа.
Описание слайда:
Описание списков в программе В разделе описания доменов списки описываются следующим образом: DOMAINS <имя спискового домена>=<имя домена элементов списка>* Звездочка после имени домена указывает на то, что описывается список, состоящий из объектов соответствующего типа.

Слайд 6





Примеры описания списков
domains

listI = integer* /* список целых чисел */ 
listR = real*    /*список вещественных чисел*/ 
listC = char*       /* список символов */ 
lists = string*      /* список строк */
listL = listI* 
/* список, элементами которого являются списки целых чисел */
Описание слайда:
Примеры описания списков domains listI = integer* /* список целых чисел */ listR = real* /*список вещественных чисел*/ listC = char* /* список символов */ lists = string* /* список строк */ listL = listI* /* список, элементами которого являются списки целых чисел */

Слайд 7


Списки в языке Пролог, слайд №7
Описание слайда:

Слайд 8





Пример записи списка с объектами разной природы
DOMAINS 
element = i(integer); c(char); s(string) 
listE = element* 
Данное описание позволит работать со списками вида:
[i(–15),s("Мама"),c('A'),s("мыла"),c('+'), s("раму"),  i(48),c('!')]
Описание слайда:
Пример записи списка с объектами разной природы DOMAINS element = i(integer); c(char); s(string) listE = element* Данное описание позволит работать со списками вида: [i(–15),s("Мама"),c('A'),s("мыла"),c('+'), s("раму"), i(48),c('!')]

Слайд 9





Рекурсивное определение списка

Список — это структура данных, определяемая следующим образом:
пустой список  [ ]  является списком; 
структура вида [H|T] является списком, если H — первый элемент списка (или несколько первых элементов списка, перечисленных через запятую), а T — список, состоящий из оставшихся элементов исходного списка.
Описание слайда:
Рекурсивное определение списка Список — это структура данных, определяемая следующим образом: пустой список [ ] является списком; структура вида [H|T] является списком, если H — первый элемент списка (или несколько первых элементов списка, перечисленных через запятую), а T — список, состоящий из оставшихся элементов исходного списка.

Слайд 10





Рекурсивное определение списка

H - голова списка, 
T — хвост списка. 
По-английски голова — Head, а хвост — Tail.
Фактически операция "|" позволяет разделить список на хвост и голову или, наоборот, приписать объект (объекты) к началу списка.
Описание слайда:
Рекурсивное определение списка H - голова списка, T — хвост списка. По-английски голова — Head, а хвост — Tail. Фактически операция "|" позволяет разделить список на хвост и голову или, наоборот, приписать объект (объекты) к началу списка.

Слайд 11


Списки в языке Пролог, слайд №11
Описание слайда:

Слайд 12





Примеры записей списков
[1, 2, 3] = [1|[2, 3]], 
т.е. в списке [1, 2, 3] элемент 1 является головой, а список [2, 3] — хвостом. 
Хвост этого списка [2, 3], также может быть представлен в виде головы 2 и хвоста [3], а список [3] можно рассматривать в виде головы 3 и хвоста []. Пустой список далее не разделяется. Таким образом,
[1, 2, 3] = [1|[2, 3]], 
[1|[2, 3]]= [1|[2|[3]]],
[1|[2|[3]]]=[1|[2|[3|[ ]]]].
Описание слайда:
Примеры записей списков [1, 2, 3] = [1|[2, 3]], т.е. в списке [1, 2, 3] элемент 1 является головой, а список [2, 3] — хвостом. Хвост этого списка [2, 3], также может быть представлен в виде головы 2 и хвоста [3], а список [3] можно рассматривать в виде головы 3 и хвоста []. Пустой список далее не разделяется. Таким образом, [1, 2, 3] = [1|[2, 3]], [1|[2, 3]]= [1|[2|[3]]], [1|[2|[3]]]=[1|[2|[3|[ ]]]].

Слайд 13





Примеры записей списков
В списке [1, 2, 3] можно выделить два первых элемента и хвост из третьего элемента [1,2|[3]]. 
Возможен вариант разбиения на голову из трех первых элементов и пустой хвост: [1, 2, 3|[]].
Описание слайда:
Примеры записей списков В списке [1, 2, 3] можно выделить два первых элемента и хвост из третьего элемента [1,2|[3]]. Возможен вариант разбиения на голову из трех первых элементов и пустой хвост: [1, 2, 3|[]].

Слайд 14


Списки в языке Пролог, слайд №14
Описание слайда:

Слайд 15


Списки в языке Пролог, слайд №15
Описание слайда:

Слайд 16





Пример 1. Вычислить длину списка (количество элементов в списке).
Идея решения:
1) в пустом списке элементов нет;
2) непустой список представляется в виде объединения первого элемента и хвоста;
3) количество элементов непустого списка равно количеству элементов хвоста, увеличенному на единицу. 
length([], 0).        /* в пустом списке элементов нет */ length([_|T], L):– length(T, L_T), L = L_T + 1. 
 /* L_T — количество элементов в хвосте , L — количество элементов исходного списка */
Описание слайда:
Пример 1. Вычислить длину списка (количество элементов в списке). Идея решения: 1) в пустом списке элементов нет; 2) непустой список представляется в виде объединения первого элемента и хвоста; 3) количество элементов непустого списка равно количеству элементов хвоста, увеличенному на единицу. length([], 0). /* в пустом списке элементов нет */ length([_|T], L):– length(T, L_T), L = L_T + 1. /* L_T — количество элементов в хвосте , L — количество элементов исходного списка */

Слайд 17





Пример 2. Проверить принадлежность элемента списку. 
Идея решения: 
1) предикат будет иметь два аргумента: первый — искомое значение, второй — список, в котором производится поиск.
2) объект принадлежит списку, если он либо является первым элементом списка, либо элементом хвоста. 
member(X,[X|_]). /* X — первый элемент списка */ 
member(X,[_|T]) :– member(X,T). 
/* X принадлежит хвосту T*/
Описание слайда:
Пример 2. Проверить принадлежность элемента списку. Идея решения: 1) предикат будет иметь два аргумента: первый — искомое значение, второй — список, в котором производится поиск. 2) объект принадлежит списку, если он либо является первым элементом списка, либо элементом хвоста. member(X,[X|_]). /* X — первый элемент списка */ member(X,[_|T]) :– member(X,T). /* X принадлежит хвосту T*/

Слайд 18


Списки в языке Пролог, слайд №18
Описание слайда:

Слайд 19


Списки в языке Пролог, слайд №19
Описание слайда:

Слайд 20


Списки в языке Пролог, слайд №20
Описание слайда:

Слайд 21





Пример 3. Объединить два списка. 
Идея решения: 
1) Первые два аргумента предиката будут представлять соединяемые списки, а третий — результат соединения.
2) В качестве основы для решения этой задачи возьмем рекурсию по первому списку. Базисом рекурсии будет факт, устанавливающий, что если присоединить к списку пустой список, в результате получим исходный список. Шаг рекурсии позволит создать правило, определяющее, что для того, чтобы приписать элементы списка, состоящего из головы и хвоста, ко второму списку, нужно соединить хвост и второй список, а затем к результату приписать спереди первый элемент первого списка.
Описание слайда:
Пример 3. Объединить два списка. Идея решения: 1) Первые два аргумента предиката будут представлять соединяемые списки, а третий — результат соединения. 2) В качестве основы для решения этой задачи возьмем рекурсию по первому списку. Базисом рекурсии будет факт, устанавливающий, что если присоединить к списку пустой список, в результате получим исходный список. Шаг рекурсии позволит создать правило, определяющее, что для того, чтобы приписать элементы списка, состоящего из головы и хвоста, ко второму списку, нужно соединить хвост и второй список, а затем к результату приписать спереди первый элемент первого списка.

Слайд 22





Решение:

conc([ ], L, L). 
/* при соединении пустого списка с L получим список L */ 
conc([H|T], L, [H|T1]) :– conc(T,L,T1). 
/* соединяем хвост и список L, получаем хвост результата */
Описание слайда:
Решение: conc([ ], L, L). /* при соединении пустого списка с L получим список L */ conc([H|T], L, [H|T1]) :– conc(T,L,T1). /* соединяем хвост и список L, получаем хвост результата */

Слайд 23





Варианты решения задач
для соединения списков. 
Например, 
Goal: conc([1, 2, 3], [4, 5], X) 
то получим в результате
X= [1, 2, 3, 4, 5]
Описание слайда:
Варианты решения задач для соединения списков. Например, Goal: conc([1, 2, 3], [4, 5], X) то получим в результате X= [1, 2, 3, 4, 5]

Слайд 24





Варианты решения задач
2) получится ли при объединении двух списков третий. 
Например, 
Goal: conc([1, 2, 3], [4, 5], [1, 2, 5]). 
False
Описание слайда:
Варианты решения задач 2) получится ли при объединении двух списков третий. Например, Goal: conc([1, 2, 3], [4, 5], [1, 2, 5]). False

Слайд 25





Варианты решения задач
3) для разбиения списка на подсписки. 
Например, 
Goal: conc([1, 2], Y, [1, 2, 3]). 
Y=[3]
Goal: conc(X, [3], [1, 2, 3]). 
X=[1, 2]
Goal: conc(X, Y, [1, 2, 3]). 
X=[], Y=[1, 2, 3]
X=[1], Y=[2, 3] 
X=[1, 2], Y=[3] 
X=[1, 2, 3], Y=[]
Описание слайда:
Варианты решения задач 3) для разбиения списка на подсписки. Например, Goal: conc([1, 2], Y, [1, 2, 3]). Y=[3] Goal: conc(X, [3], [1, 2, 3]). X=[1, 2] Goal: conc(X, Y, [1, 2, 3]). X=[], Y=[1, 2, 3] X=[1], Y=[2, 3] X=[1, 2], Y=[3] X=[1, 2, 3], Y=[]

Слайд 26





Варианты решения задач
4) для поиска элементов, находящихся левее и правее заданного элемента. 
Например, какие элементы находятся левее и правее числа 2:
Goal: conc(L, [2|R], [1, 2, 3, 2, 4]). 
L=[1], R=[3, 2, 4]. 
L=[1, 2, 3], R=[4]
Описание слайда:
Варианты решения задач 4) для поиска элементов, находящихся левее и правее заданного элемента. Например, какие элементы находятся левее и правее числа 2: Goal: conc(L, [2|R], [1, 2, 3, 2, 4]). L=[1], R=[3, 2, 4]. L=[1, 2, 3], R=[4]

Слайд 27





Варианты решения задач
5) на основе предиката conc создать предикат, находящий последний элемент списка:
last(L,X):– conc(_,[X],L). 
Этот предикат можно реализовать и без использования предиката conc:
last2([X],X). 
/* последний элемент одноэлементного списка — этот элемент */ 
last2([_|L],X):– last2(L,X). 
/* последний элемент списка совпадает с последним элементом хвоста */
Описание слайда:
Варианты решения задач 5) на основе предиката conc создать предикат, находящий последний элемент списка: last(L,X):– conc(_,[X],L). Этот предикат можно реализовать и без использования предиката conc: last2([X],X). /* последний элемент одноэлементного списка — этот элемент */ last2([_|L],X):– last2(L,X). /* последний элемент списка совпадает с последним элементом хвоста */

Слайд 28





Варианты решения задач
6) проверить принадлежность элемента списку, используя предикат conc. 
Идея решения: если элемент принадлежит списку, то список может быть разбит на два подсписка так, что искомый элемент является головой второго подсписка:
member4(X,L):– conc(_,[X|_],L).
Описание слайда:
Варианты решения задач 6) проверить принадлежность элемента списку, используя предикат conc. Идея решения: если элемент принадлежит списку, то список может быть разбит на два подсписка так, что искомый элемент является головой второго подсписка: member4(X,L):– conc(_,[X|_],L).

Слайд 29





Варианты решения задач
7) по двум значениям и списку проверить, являются ли эти значения соседними элементами списка (использовать предикат, объединяющий списки). 
Предикат будет иметь три параметра: первые два — значения, третий — список.
Описание слайда:
Варианты решения задач 7) по двум значениям и списку проверить, являются ли эти значения соседними элементами списка (использовать предикат, объединяющий списки). Предикат будет иметь три параметра: первые два — значения, третий — список.

Слайд 30


Списки в языке Пролог, слайд №30
Описание слайда:

Слайд 31





Пример 4. Удалить все вхождения заданного значения из списка 

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

Слайд 32





Пример 4. Удалить все вхождения заданного значения из списка 
Идея решения: 
Базис рекурсии - если первый элемент окажется удаляемым, то нужно перейти к удалению заданного значения из хвоста списка. Результатом в данном случае должен стать список, полученный путем удаления всех вхождений искомого значения из хвоста первоначального списка. Шаг рекурсии будет основан на том, что если первый элемент списка не совпадает с тем, который нужно удалять, то он должен остаться первым элементом результата, и нужно переходить к удалению заданного значения из хвоста исходного списка. Полученный в результате этих удалений список должен войти в ответ в качестве хвоста.
Описание слайда:
Пример 4. Удалить все вхождения заданного значения из списка Идея решения: Базис рекурсии - если первый элемент окажется удаляемым, то нужно перейти к удалению заданного значения из хвоста списка. Результатом в данном случае должен стать список, полученный путем удаления всех вхождений искомого значения из хвоста первоначального списка. Шаг рекурсии будет основан на том, что если первый элемент списка не совпадает с тем, который нужно удалять, то он должен остаться первым элементом результата, и нужно переходить к удалению заданного значения из хвоста исходного списка. Полученный в результате этих удалений список должен войти в ответ в качестве хвоста.

Слайд 33





Решение

delete_all(_,[],[]). 

delete_all(X,[X|L],L1):– delete_all (X,L,L1).

delete_all (X,[Y|L],[Y|L1]):– X<>Y, 
                                                 delete_all (X,L,L1).
Описание слайда:
Решение delete_all(_,[],[]). delete_all(X,[X|L],L1):– delete_all (X,L,L1). delete_all (X,[Y|L],[Y|L1]):– X<>Y, delete_all (X,L,L1).



Похожие презентации
Mypresentation.ru
Загрузить презентацию