Program, który się uczy.

Podobne dokumenty
Statyczne i dynamiczne predykaty

Programowanie w Logice

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Ą Ę

Ę Ć Ź Ć Ę Ń Ć ć

Ę ń Ź Ę ń Ę

Ć ź ż ć ć ć ż ż

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

ń ę ńń ń

Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka)

Programowanie w logice

Ę

Prolog Wejście / wyjście r

ń ż Ż

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

ż ż ć ć ć ć ć ć ć ż ż ź ć Ą Ą ż ć ć ź

ń ń ń ń ń Ń ń ć ź

ż Ć ż

Dana jest baza: kobieta(katarzyna). kobieta(anna). kobieta(maria). kobieta(marianna). kobieta(marta). Zdefiniujemy predykat kobiety/0 następująco:

ć ź ć ź Ą Ę ć

Ę Ź Ż Ż ć ć ć ć ć

ń Ż Ę Ę ń

ń Ź Ż ć Ż Ą ż Ą ż

Ę ź Ą

Ł Ą Ł Ł ć



Ź ń Ę


Utworzenie pliku. Dowiesz się:

Ą Ę Ń Ś Ą

Ź ź Ź ń ń ń ń

Ć

I. Podstawy języka C powtórka


ść ś ść Ę ś ś ść ś ź ś Ę

PROLOG INNE PRZYKŁADY MACIEJ KELM

Ń ż ż ę Ó ż

1 Podstawy c++ w pigułce.

Ć Ć Ć Ń Ż

ć ć ć ć ć ć ź ć ć ć ć Ź ć ć ć Ń

Ż Ę

ż ń ż ń ć ż ź

ć ć ć ć ć ć ć ń Ę ć ć

Podstawy Programowania Podstawowa składnia języka C++

UWAGA!!! Przed przystąpieniem do zamknięcia roku proszę zrobić kopie bezpieczeństwa

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

ż

Ć Ź ć Ę ć Ę Ć Ź Ź Ć

ć ć Ń Ę

ć ż ć Ń ć ć Ó ć ń ć ń ć ć

Pętla for. Wynik działania programu:

Ę Ę ć ć Ę Ą Ę Ą Ę Ę Ę Ę Ę Ę ź Ę Ż Ę Ę Ę Ę ć Ę Ę ć Ę ć

Ź ź Ź

ź Ę

ć Ę ć ć ć Ł ć ń ć ć ć ń ć

ż ć ć ż Ś ż ż ć ć ć ż ż

ę ź ć ź

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

ż ć ć ć ć ć ż Ę ż Ę ż Ł Ą ż ń Ą Ł

ń Ń Ś ń ź ź ć ź ć ć Ę ć ń ń ń Ę Ą ŚÓ

Ż Ź Ż ż Ś Ś Ź Ż Ż Ż Ż Ż ć ć Ż

Ń ź ź Ą Ń Ą ć ć ć ć ć Ń Ą

Ó Ź ż ć Ą ż ż ć Ę ź Ą ż ż ż ż ż

ć ż Ą ż ż ż ż ż ż ż Ę Ę

Ż Ę Ż Ł Ą ź ć ć ć

Instalacja Ubuntu 12.12

ć ć Ł ć ć ć Ę Ę

ż ń ń ń ż ń ń Ę ń ć ń ż ń Ę

ń ń ć Ń ŃŃ

ń ń Ó ń ż ń Ę ń

Ś Ń ć Ę Ą Ę Ś Ń Ó



Ź Ź ź Ś Ą Ź ć Ś

ź ź ŁĄ ź Ę Ę Ę Ę ź ź Ę Ę Ł ź

ż ń Ł ń ń ż ż ż ż ż

Ą Ę Ń Ą ń Ń ń ń Ą ń

Ć ź Ś Ż ź Ę Ś

ń ń ń ń ń Ż ć Ż Ł Ż Ł Ś ć ń Ś Ę Ż ć ń Ż Ż Ż Ą Ż Ż Ł Ż Ś

Ł ź Ń

ź Ś Ż Ę Ś


Ż ć ć Ł Ł ć ć Ł ć ć

Ż ń ć ć ń Ż ć Ż Ł ń Ż ń ń ń ń

Ń ć Ł Ł Ł ź

Ż Ż Ę Ą ź Ż Ż Ż Ń ź

Ą Ś Ń Ś Ą Ś Ń

ź ć

ć

Ś ć ź ź Ę ź ź Ę Ę Ą Ś Ę Ś Ę ź Ę Ś Ś Ę Ś Ś Ł Ś

ż Ż Ż Ż Ż Ż

Zmienne i stałe w PHP

Ż ź Ś Ż


Ą

ć ż ż ż ź

Instrukcja do programu BASIC PR-02

Ś Ę ŚĆ Ę ź ź ź Ś Ś Ś ć ź Ś ź Ę Ś Ą ź ź ź Ś Ś Ę ź ź

Transkrypt:

Program, który się uczy. Korzystając z omówionych poleceń, jesteśmy w stanie zaprojektować program, który nauczy się nowych informacji do swojej bazy wiedzy, a także zapisze je w taki sposób, aby mogły być dostępne w następnej sesji. W skrócie, program działa następująco: 1. Wczytujemy bazę wiedzy poprzez reconsult 2. Wywołujemy funkcję która pyta o kraj i wczytujemy tekst z klawiatury (read). 3. W przypadku otrzymania ciągu znakowego stop. program przełącza się w zapis do pliku bazy wiedzy (tell), następuje listing predykatów, told zamyka plik i kończy się działanie programu. 4. W zależności od tego, czy podany kraj jest już w naszej bazie, wyświetlamy jego stolicę lub pytamy o nią, dopisując nową informację poprzez assertz. 5. Przechodzimy ponownie do kroku drugiego.

Program, który się uczy. Kod programu: start :- reconsult('baza.pl'), nl, write('podaj nazw ę kraju z małej litery i z kropk ą na końcu.'), nl, write('napisz "stop." aby przerwać działanie programu.'), nl, nl, zapytanie. zapytanie :- write('kraj? '), read(kraj), odpowiedz(kraj). odpowiedz(stop) :- write('zapisywanie bazy wiedzy...'), nl, tell('baza.pl'), listing(stolica), told, write('gotowe!'),nl.

Program, który się uczy. Kod programu (c.d.): odpowiedz(kraj) :- stolica(kraj,miasto), write('stolic ą '), write(kraj), write(' jest '), write(miasto),nl, nl, zapytanie. odpowiedz(kraj) :- \+ stolica(kraj,_), write('nie znam stolicy tego kraju.'),nl, write('prosz ę, podaj mi j ą!'),nl, write('stolica? '), read(miasto), write('dziękuj ę.'),nl,nl, assertz(stolica(kraj,miasto)), zapytanie.

Przykładowe wywołanie programu. Program, który się uczy. Podaj nazwę kraju z małej litery i z kropką na końcu. Napisz "stop." aby przerwać działanie programu. Kraj? polska. Stolicą polska jest warszawa Kraj? dania. Stolicą dania jest kopenhaga Kraj? rosja. Nie znam stolicy tego kraju. Proszę, podaj mi ją! Stolica? moskwa. Dziękuję. Kraj? rosja. Stolicą rosja jest moskwa Kraj? stop. Zapisywanie bazy wiedzy... Gotowe! true

Wejście/wyjście znaków (get, get0, put) Wbudowany predykat put wyświetla znak ASCII podany jako liczbę. Przykład:?- put(42). * True. Przeciwieństwem put jest get który pobiera znak od użytkownika i wyświetla jego liczbową reprezentację. Przykład:?- get(x). : Ę X = 280.

Wejście/wyjście znaków (get, get0, put) W zależności od interpretera Prologa, program może się zachowywać w dwa sposoby. Pierwszym z nich jest wczytanie buforowane. Znak zostanie odczytany dopiero po wciśnięciu i zatwierdzeniu go klawiszem enter. W przypadku wejścia klawiatury, które nie jest buforowane, znak zostanie wczytany bezpośrednio po jego wciśnięciu. Predykat get automatycznie opuszcza znaki puste, nowej linii (enter), lub inne które są znakami specjalnymi, których się nie da wyświetlić. Jeżeli chcemy wczytać dowolny znak, istnieje dodatkowy predykat get0. Przykład:?- get0(x), get0(y). : Ω X = 937, Y = 10. Znak nowej linii \n (10) jest poprzedzony znakiem omega (w reprezentacji UTF 8).

Wejście/wyjście znaków (get, get0, put) Tablica znaków ASCII (7 bit)

Wejście/wyjście znaków (get, get0, put) Standard ISO definiuje jedynie put_code (odpowiednik put) oraz get_code (odpowiednik get0). Predykat get, może być zdefiniowany w sposób następujący: get(code) :- repeat, get_code(code), Code>32,!. Zgodnie z tablicą kodów ASCII pomijamy znaki o wartości mniejszej lub równej 32.

Tworzenie menu wyboru Dzięki funkcji wczytującej znak od użytkownika, możemy napisać proste menu wyboru. Oto przykładowy kod: stolica(polska, warszawa). stolica(niemcy, berlin). stolica(szwecja, sztokholm). stolica(dania, kopenhaga). start :- pokaz_menu, pobierz_z_menu(stolica), stolica(stolica,miasto), nl, write('stolic ą '), write(stolica), write(' jest '), write(miasto), nl. pokaz_menu :- write('o jakim kraju chcesz si ę dowiedzieć?'),nl, write(' 1 Polska'), nl, write(' 2 Niemcy'), nl, write(' 3 Szwecja'), nl, write(' 4 Dania'), nl, write('podaj liczbe od 1 do 4 -- ').

Tworzenie menu wyboru Kod (c.d.) pobierz_z_menu(stolica) :- get(code), % wczytaj znak get0(_), % opuść znak nowej linii interpretuj(code,stolica). interpretuj(49,polska). /* ASCII 49 = '1' */ interpretuj(50,niemcy). /* ASCII 50 = '2' */ interpretuj(51,szwecja). /* ASCII 51 = '3' */ interpretuj(52,dania). /* ASCII 52 = '4' */ Przykładowe wywołanie:?- start. O jakim kraju chcesz si ę dowiedzieć? 1 Polska 2 Niemcy 3 Szwecja 4 Dania Podaj liczbe od 1 do 4 -- 1 Stolic ą polska jest warszawa true.

Tworzenie menu wyboru Inne prostsze menu Tak lub Nie można zaimplementowane następująco: tak_lub_nie(result) :- get(char), get0(_), interpret(char,result),!. % wczytaj znak tak_lub_nie(result) :- nl, write('y czy N?:'), tak_lub_nie(result). interpret(89,yes). % ASCII 89 = 'Y' interpret(121,yes). % ASCII 121 = 'y' interpret(78,no). % ASCII 78 = 'N' interpret(110,no). % ASCII 110 = 'n' W tym przypadku menu powtarza się dopóki nie podamy litery Y, y, N, lub n. Wywołanie:?- write('czy chcesz kontynuować? [Y/N] '), tak_lub_nie(x). Czy chcesz kontynuować? [Y/N] x Y czy N?:n X = no.

Systemy ekspertowe Używając języka Prolog możemy wykonać w prosty sposób system ekspertowy. Można w nim wyróżnić poniższe elementy: interfejs użytkownika baza wiedzy mechanizm wnioskujący, który odnajduje rozwiązanie/odpowiedź mechanizm wyjaśniający, dlaczego jest to odpowiedź poprawna/dopuszczalna

Systemy ekspertowe Używając języka Prolog możemy wykonać w prosty sposób system ekspertowy. Można w nim wyróżnić poniższe elementy: interfejs użytkownika baza wiedzy mechanizm wnioskujący, który odnajduje rozwiązanie/odpowiedź mechanizm wyjaśniający, dlaczego jest to odpowiedź poprawna/dopuszczalna

Systemy ekspertowe Jednym z przykładowych systemów ekspertowych, jest diagnozowanie przyczyny awarii samochodu. W przypadku tego systemu elementy systemu ekspertowego są odwzorowane przez następujące predykaty: problem/1 baza wiedzy probuj_wszystkie_mozliwosci/0 mechanizm wnioskujący wytlumacz/1 mechanizm wyjaśniania zadaj_pytanie/1 i uzytkownik_mowi/2 interfejs użytkownika

Systemy ekspertowe Program diagnozowanie przyczyny awarii samochodu w Prologu ma dwie zalety, które były by trudne do zaimplementowania w konwencjonalnych językach programowania. wyświetla on listę wszystkich możliwych diagnoz, nie tylko jedną nie pyta użytkownika o informacje, które nie są w danej chwili potrzebne Aby to osiągnąć, program nie wywołuje bezpośrednio predykatu zapisana_odp, ale używa uzytkownik_mowi, który albo pozyskuje odpowiedź użytkownika z obecnej bazy wiedzy, albo pyta się go o nią.

Systemy ekspertowe Kod programu: :- reconsult('taknie.pl'). start :- write('program diagnozuje dlaczego samochód nie chce ruszyć. Odpowiadaj na pytania Y lub N'), wyczysc_odpowiedzi, probuj_wszystkie_mozliwosci. probuj_wszystkie_mozliwosci :- problem(d), wytlumacz(d), fail. probuj_wszystkie_mozliwosci. % wróć si ę do wszystkich mozliwosci %...następnie zakończ.

Systemy ekspertowe Kod programu: problem(rozladowana_bateria) :- uzytkownik_mowi(rozruch_byl_ok,yes), uzytkownik_mowi(rozruch_jest_ok,no). problem(rozladowana_bateria) :- uzytkownik_mowi(rozruch_byl_ok,yes), uzytkownik_mowi(rozruch_jest_ok,no). problem(zly_bieg) :- uzytkownik_mowi(rozruch_byl_ok,no). problem(uklad_rozruchu) :- uzytkownik_mowi(rozruch_byl_ok,no). problem(uklad_paliwa) :- uzytkownik_mowi(rozruch_byl_ok,yes), uzytkownik_mowi(paliwo_jest_ok,no). problem(uklad_zaplonowy) :- uzytkownik_mowi(rozruch_byl_ok,yes), uzytkownik_mowi(paliwo_jest_ok,yes).

Systemy ekspertowe Kod programu: wyczysc_odpowiedzi :- retract(zapisana_odp(_,_)),fail. wyczysc_odpowiedzi. uzytkownik_mowi(q,a) :- zapisana_odp(q,a). uzytkownik_mowi(q,a) :- \+ zapisana_odp(q,_), nl, nl, zadaj_pytanie(q), tak_lub_nie(odp), asserta(zapisana_odp(q,odp)), Odp = A. zadaj_pytanie(rozruch_byl_ok) :- write('czy rozrusznik odpalał samochód na początku normalnie?\n'). zadaj_pytanie(rozruch_jest_ok) :- write('czy rozrusznik odpala nadal normalnie?\n'). zadaj_pytanie(paliwo_jest_ok) :- write('zajrzyj go gaźnika. Czy widzisz lub czujesz benzyne?\n').

Systemy ekspertowe Kod programu: wytlumacz(zly_bieg) :- write('samochód może być na złym biegu.'), nl. wytlumacz(uklad_rozruchu) :- write('sprawd ź baterie, akumulator i alternator.\njeżeli wszystko jest OK, problemem może być rozrusznik.'), nl. wytlumacz(rozladowana_bateria) :- write('twoje próby odpalenia samochodu rozładowały akumulator. Naładuj go.'), nl. wytlumacz(uklad_paliwa) :- write('sprawd ź czy masz paliwo w baku. Jeśli tak sprawd ź czy przewód lub filtr paliwowy nie jest zatkany. Może to być te ż problem pompy paliwowej.'), nl. wytlumacz(uklad_zaplonowy) :- write('sprawd ź świece zapłonowe, kable i inne elementy układu zapłonowego. Jeśli jakakolwiek część wygląda na uszkodzon ą lub straciła date ważności - wymie ń j ą. W przypadku nierozwiązania problemu skontaktuj si ę z mechanikiem.'), nl. :- dynamic(zapisana_odp/2).