МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
Метод пухирця.Додавання елемента без дублювання. Minimum(X, Y, M). Знайти мінімальний елемент із двох. minimum(X, Y, X):- X<=Y, !. minimum(X, Y, Y):- Y<X,!. ?-minimum(2, 5, Y). Щоб додати елемент у голову списку досить використовувати add(X, L, [X|L]). Але якщо виникає необхідність додавати тільки, коли елемент відсутній, то можна додати правило: add(X, L, L):-member(X, L), !, add(X, L, [X|L]). Питання ?-add(a, [b, c], L). L=[a, b, c] ?-add(b, [b, c], L). L=[b, c] Якщо перетин забрати, то ?-add(b, [b, c], L) L=[b, c]; L=[b, b, c] Таким чином, при вилученні відсікання, змінився декларативний зміст програми - відсікання "червоне". 5.2.3 Класифікація. Використовуючи відсікання, легко зробити класифікацію об'єктів. Наприклад, треба класифікувати числа class(X, plus):-X>0, !. class(X, minus):-X<0, !. class(X, zero):-X=0, !. ?-class(4, Y). Y=plus 5.2.4 Відсікання в чисельній рекурсії. Застосування відсікання в рекурсії дозволяє значно скоротити використання пам'яті. Визначимо факторіал factorial(0, 1):-!. factorial(N, RES) :-N1=N-1, factorial(N1, N1fak), RES=N*N1fak. 5.2.5 Зауваження при використанні відсікання. Застосування перетину за рахунок скорочення перебору дозволяє підвищити ефективність програми. Крім цього відсікання спрощує програмування вибору варіантів. Разом з тим, часто, при використанні червоних відсікань може зміниться декларативний зміст програми. Тому відсікання вимагає обережності у використанні. Варто уникати двох помилок: відсікання шляхів обчислення, які не можна відкидати і не відсікання тих рішень, що повинні були бути відкинуті. 5.3 Сортування списків. Дотепер засобу прологу використовувалися при записі простих процедур і прикладів. Розглянемо більш складні приклади написання програм на пролозі для різних методів сортування. 5.3.1 Метод наївного сортування. У цьому методі елементи в списку переставляються ( перемішуються permutation/2 ),і перевіряється відсортований цей чи список ні: sorted/1. Це записується: sortn(L1, L2) :- permutation(L1, L2), sorted(L2), !. Перестановки визначимо через append permutation(L, [H|T]) :- append(V, [H|U], L), append(V, U, W), permutation(W, T). permutation([], []). Перевірка того, що елементи списку розташовані в зростаючому порядку виражається через дві пропозиції.Факт означає, що список з одного елемента завжди упорядкований. Правило затверджує, що список упорядкований ,якщо перші два елементи розташовані один по одному і залишок , що починається з другого елемента теж упорядкований: sorted([L]). sorted([X,Y|T]) :- order(X,Y), sorted([Y|T]). order(X, Y) :- X =< Y. Це простий і ефективний метод. Декларативний опис: Знайти в списку L два суміжних елементи X і Y, таких, що X > Y, поміняти їхній місцями й одержати новий список, M, потім відсортувати M. Для пошуку таких елементів і перестановки використовується процедура swap/2. Якщо в списку немає ні однієї пари суміжних елементів X і Y, таких, що X > Y, вважати що список відсортований. busort(L, S) :- swap(L, M), !, busort(M, S). busort(L, L) :- !. swap([X, Y|R], [Y, X|R]) :- order(Y, X). swap([X|R], [X|R1]) :- swap(R, R1). Читайте також:
|
||||||||
|