Laboratorium sztucznej inteligencji Laboratorium nr 2 Podstawy programowania w Prologu. Rekurencja



Pobieranie 215.5 Kb.
Strona1/2
Data23.03.2020
Rozmiar215.5 Kb.
  1   2



Laboratorium sztucznej inteligencji

Laboratorium nr 2

Podstawy programowania w Prologu. Rekurencja



opracowanie: mgr. inż. Magdalena Wilkołazka

Podstawy teoretyczne

    1. Predykat odcięcia - ! i predykat – fail.

Automatyczne nawracanie jest jedną z cech charakterystycznych Prologa. Czasami są sytuacje, kiedy takie nawracanie powoduje stratę czasu, bo przeszukiwanie rozwiązań prowadzi donikąd. Wtedy można zastosować operator !, który pozwala na zablokowanie procesu nawrotu w wybranym miejscu. Jest to predykat bezargumentowy zawsze prawdziwy, który w czasie swojej weryfikacji powoduje zaniechanie badania innych, pozostałych jeszcze do weryfikacji definicji predykatów na bieżącym poziomie drzewa wnioskowania (uniemożliwia dokonanie nawrotu powyżej miejsca, w którym został wstawiony znak odcięcia (!)).

Zastosowanie operatora odcięcia zmienia logicznie (deklaratywnie) zdanie. np.:



p :- a, b.

p :- c.

jest równoważne zdaniu:



p ⇔ (a &b) ∨ c.

Natomiast:



p :- a, !, b.

p :- c.

co jest równoważne zapisowi:



p ⇔ (a &b) ∨ (~a & c).

Należy pamiętać, że negacje działają poprawnie tylko dla zunifikowanych (określonych jakąś wartością) zmiennych.

Wyróżniamy dwa rodzaje odcięć:

• odcięcia „czerwone” - to takie, które zmieniają interpretację deklaratywną programu*, utrudniają jego zrozumienie i powodują utratę pewnych rozwiązań.

• odcięcia „zielone” - takie, które nie wpływają na interpretację deklaratywną programu, nie zmniejszają jego czytelności i zachowują wszystkie rozwiązania (choć obcinają drzewo poszukiwań)
Przykład

Jest dany predykat funkcja/2, który nie zawiedzie, gdy pierwszy argument X i drugi argument Y przyjmą wartości opisane warunkami:



  • Jeżeli X <3, to Y = 0.

  • Jeżeli X ≥ 3 i X < 6, to Y = 2.

  • Jeżeli X ≥ 6, to Y = 4.

Rozwiązanie:

funkcja( X , 0) :- X < 3,!.

funkcja( X , 2) :- X >= 3, X < 6, !.

funkcja( X , 4) :- X >= 6.

Zadać pytanie:



funkcja(1,Y),Y > 2.

Aby zwiększyć optymalność kodu można zapisać źródło w postaci następujących reguł:



  • Jeżeli X<3, to Y = 0.

  • W przeciwnym przypadku jeżeli X < 6, to Y = 2.

  • W przeciwnym przypadku Y = 4.

Rozwiązanie:

funkcja( X , 0) :-X < 3,!.

funkcja( X , 2) :- X < 6, !.

funkcja( X , 4).

Przykład2



indian(curry).

indian(dahl).

indian(tandoori).

indian(kurma).

mild(dahl).

mild(tandoori).

mild(kurma).

chinese(chow_mein).

chinese(chop_suey).

chinese(sweet_and_sour).

italian(pizza).

italian(spaghetti).

szukaj(X):-indian(X),write(X),!.

Predykat fail służy do wymuszania nawrotów; zamiast wpisywać średnik, aby wyszukać kolejne rozwiązanie możemy użyć fail.

Oto przykład:

nazwa1(1) :- write('Jeden').

nazwa1(2) :- write('Dwa').

nazwa1(3) :- write('Trzy').

nazwa1(_) :- write(' Nie wiem!').

działanie Prologa:



?- nazwa1(2).

Dwa

Yes

?- nazwa1(2), fail.

Dwa Nie wiem!

No

?- nazwa1(X), fail.

JedenDwaTrzy Nie wiem!

No

W przypadku, gdy połączy się fail z predykatem odcięcia pojawią się takie wyniki:



nazwa2(1) :- !, write('Jeden').

nazwa2(2) :- !, write('Dwa').

nazwa2(3) :- !, write('Trzy').

nazwa2(_) :- write(' Nie wiem!').

Wyniki:


?- nazwa2(2).

Dwa

Yes

?- nazwa2(2), fail.

Dwa

No

?- nazwa2(X), fail.

Jeden

No

    1. If-else

Istnieje w prologu wbudowany predykat, który umożliwia wyrażenie konstrukcji if-then-else. W prologu if A then B else C można zapisać jako (A->B;C). Prolog to odczytuje, jako: spróbuj cel A, jesli jest on prawdziwy przejdź do celu B i zignoruj C. Jeżeli A zawiedzie, realizowany jest cel C i ignorowany B. Predykat max z wykorzystaniem konstrukcji if-then-else jest przedstawiony, jako:

max(X,Y,Z):-(X=Z=Y;Z=X).



    1. Operacje porównania.



  1. Rekurencja

Odwołanie reguły do samej siebie nazywamy rekurencją – rekurencja jest jedną z podstawowych operacji w prologu.



Directory: files -> 146935 -> public
public -> Operacje arytmetyczne
public -> Kolejne kroki tej metody to
public -> Podstawy o czym będziemy mówić? Krótka historia C++
public -> Zadania z bramek logicznych I projektowania układów
public -> Liczby rzeczywiste, wprowadzane do komputera w zapisie dziesiętnym, podlegają automatycznemu przetworzeniu do jednej z postaci przewidzianych w standardzie ieee 754-2008
public -> Na dzisiejszych ćwiczeniach zostanie pokazany proces generowania kodu na podstawie przykładowego diagramu klas opisującego sklep inetrnetowy
public -> Przeliczanie liczb w systemie dziesiętnym na kod U2 I odwrotnie
public -> 1. Operacje arytmetyczne na liczbach w różnych systemach liczbowych dodawanie, odejmowanie, mnożenie i dzielenie
public -> Laboratorium nr 11
public -> Instrukcja switch I typ wyliczeniowy

Pobieranie 215.5 Kb.

Share with your friends:
  1   2




©operacji.org 2020
wyślij wiadomość

    Strona główna
warunków zamówienia
istotnych warunków
przedmiotu zamówienia
wyboru operacji
Specyfikacja istotnych
produktu leczniczego
oceny operacji
rozwoju lokalnego
strategii rozwoju
kierowanego przez
specyfikacja istotnych
Nazwa przedmiotu
Karta oceny
ramach działania
przez społeczno
obszary wiejskie
dofinansowanie projektu
lokalnego kierowanego
Europa inwestująca
Regulamin organizacyjny
przetargu nieograniczonego
kryteria wyboru
Kryteria wyboru
Lokalne kryteria
Zapytanie ofertowe
Informacja prasowa
nazwa produktu
Program nauczania
Instrukcja obsługi
zamówienia publicznego
Komunikat prasowy
programu operacyjnego
udzielenie zamówienia
realizacji operacji
opieki zdrowotnej
przyznanie pomocy
ramach strategii
Karta kwalifikacyjna
oceny zgodno
Specyfikacja techniczna
Instrukcja wypełniania
Wymagania edukacyjne
Regulamin konkursu
lokalnych kryteriów
strategia rozwoju
sprawozdania finansowego
ramach programu
ramach poddziałania
kryteriów wyboru
operacji przez
trybie przetargu