Содержание
- 2. Пролог-процесори Детермінізм обчислень: Пролог-процесори. Огляд особливостей (1/2) послідовний перегляд атомів запиту; послідовний перегляд (перебір) правил; реалізація
- 3. Пролог-процесори Детермінізм обчислень: підстановки (правила) застосовуються до найлівішого атому у запиті (такий принцип спряжений зі стратегією
- 4. Пролог-процесори 1) Предок(X,Y):-Батько(X,Y). 2) Предок(X,Y):-Батько(X,Z), Предок(Z,Y). 3) Батько(дідІван, дядькоЛука). 4) Батько(дідІван, батькоВасиль). 5) Батько(батькоВасиль, малийПетрик). Пролог-процесори.
- 5. Пролог-процесори 11) Предок(X,Y):- Предок(X,Z),Батько(Z,Y). 21) Предок(X,Y):- Батько(X,Y). 3) Батько(дідІван, дядькоЛука). 4) Батько(дідІван, батькоВасиль). 5) Батько(батькоВасиль, малийПетрик).
- 6. Пролог-процесори ff(X,Y):-ff(X,Z),f(Z,Y). %forefather, ancestor ff(X,Y):-f(X,Y). f('Іван','Петро'). f('Петро','Лука'). Пролог-процесори. Приклад зациклення (2/2)
- 7. Пролог-процесори Стандартні предикати: cut (є скорочена форма “!”) – відсікання (або закріплення вибору); fail – предикат,
- 8. До техніки Prolog-програмування. Пошук множин розв’язків
- 9. Пролог-процесори SWI-Prolog ?- append(X,Y, [a,b,c]). Натискання клавіші “Space” дозволяє отримувати черговий розв’язок (при його наявності).
- 10. Пролог-процесори Пошук усіх розв’язків із використанням предикату fail Предикат fail зручно використовувати при потребі знайти не
- 11. Пролог-процесори Пошук усіх розв’язків із використанням предикату fail ?- append(X,Y,[a,b,c]),nl,write(X),write(Y),fail.
- 12. До техніки Prolog-програмування. Скорочувані правила
- 13. Пролог-процесори Скорочувані правила (1/3) my_max(A,B,A):-A>=B. my_max(A,B,B):-A Чи потрібна перевірка X my_max(A,B,A):-A>=B. my_max(A,B,B). Але спробуємо скористатись предикатом
- 14. Пролог-процесори Скорочувані правила (2/3) my_max(A,B,A):-A>=B. my_max(A,B,B). Запит: my_max(3,2,Z), nl, write(Z), fail. SWI-Prolog
- 15. Пролог-процесори Скорочувані правила та відсікання cut (!) (3/3) Як же підправити програму? my_max(A,B,A):-A>=B, ! . my_max(A,B,B).
- 16. Пролог-процесори Використовується для припинення обчислень для заданої “гілки” (часто після перевірки даних та визначення їх не
- 17. Пролог-процесори Цей предикат дозволяє відкат “розвернути” (запустити черговий крок циклічних обчислень). Моделювання циклів (повтори). Предикат repeat
- 18. Пролог-процесори Повтори з лічильником. (SWI-Prolog) count(0). count(X) :- count(Y), X is Y+1. Знайти найменше ціле число
- 19. Пролог-процесори Пошук (перевірка) елемента за його позицією у списку % 8. Той, хто мешкає в центральному
- 20. Пролог-процесори Знайти список позицій входжень елемента X у список L. Приклад 1 із пошуком позицій елементів
- 21. Пролог-процесори Знайти у списку L перший (найлівіший) елемент, більший за X, забезпечуючи пошук як значення, так
- 22. Пролог-процесори find1([H|T],X,H,P,P):-H>X,!. find1([H|T],X,Zn,PosZn,P):-H Приклад 2 із пошуком позицій елементів списку (2/2) Перестрахувались навіть двічі! find1_([H|T],X,H,P,P):-H>X. find1_([H|T],X,Zn,PosZn,P):-Y
- 23. Пролог-процесори Знайти у списку L останній (найправіший) з елементів, більших за X, забезпечуючи пошук як значення,
- 24. Пролог-процесори Повставляти елементи одного списку у впорядкований за зростанням другий список. Сформувати список із номерами позицій,
- 25. Пролог-процесори Повставляти елементи одного списку у впорядкований за зростанням другий список. Сформувати список із номерами позицій,
- 26. Пролог-процесори Приклад 4 (3/3) Повставляти елементи одного списку у впорядкований за зростанням другий список. Сформувати список
- 27. Пролог-процесори inv([],[]). % 1 - вх список, 2 - рез список inv(L_in,L_out):-inv1(L_in,L_out,[]). inv1([],L,L). % 1 -
- 28. Додаток 1
- 29. Пролог-процесори fib(1,0). fib(2,1). fib(N,F) :- N>2, N2 is N-2, N1 is N-1, fib(N2,F2), fib(N1,F1), F is
- 30. Пролог-процесори isFib
- 31. Пролог-процесори % genToN1(N, [2,3, …, N-1]) - true, N>3 genToN1(2,[]). genToN1(N, [N1|T]):-N>2, N1 is N-1, genToN1(N1,T).
- 32. Пролог-процесори genToN1
- 33. Пролог-процесори countFrom2(2). countFrom2(X) :- countFrom2(Y), X is Y+1. isPrimeByCount(2). isPrimeByCount(N) :- N>2,countFrom2(X), N mod X =:=
- 34. Пролог-процесори countFrom2(2). countFrom2(X) :- countFrom2(Y), X is Y+1. progon(N):- N1 is N-1, countFrom2(X), NX is (N
- 35. Додаток 2
- 36. Пролог-процесори SWI-Prolog-Editor. Завантаження та запуск 1 2
- 37. Пролог-процесори SWI-Prolog-Editor. Параметри трасування 2 1 3
- 38. Пролог-процесори SWI-Prolog-Editor. Виконання (із трасуванням) Клавіша “Enter” розпочинає виконання, клавіша “Space” може бути використана для ініціювання
- 39. Пролог-процесори SWI-Prolog-Editor. Трасування. Додаткове вікно (1/2) Черговий крок – клавіша “Space”
- 40. Пролог-процесори SWI-Prolog-Editor. Трасування. Додаткове вікно (2/2)
- 41. Пролог-процесори SWI-Prolog-Editor. Результат виконання
- 42. Додаток 3
- 43. Пролог-процесори Prolog. Online
- 44. Пролог-процесори Prolog. Online
- 46. Скачать презентацию