Programowanie w logice

Podobne dokumenty
Programowanie w logice

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

Programowanie w Logice

Programowanie w logice Prolog 3

Programowanie w logice Prolog 2

Prolog Wejście / wyjście r

Podstawy języka PROLOG

Dariusz Banasiak. Instytut Informatyki, Automatyki i Robotyki. Politechniki Wrocławskiej

Statyczne i dynamiczne predykaty

Programowanie w Logice

Języki programowania deklaratywnego

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

Programowanie w logice

Wykład PASCAL - Pliki tekstowe

PROLOG. Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd.

Program, który się uczy.

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Projekt 4: Programowanie w logice

Programowanie w Logice Przykłady programów. Przemysław Kobylański

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie deklaratywne

Język C, tablice i funkcje (laboratorium, EE1-DI)

Paradygmaty programowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Algorytm. a programowanie -

PODSTAWY SZTUCZNEJ INTELIGENCJI

Pliki. Operacje na plikach w Pascalu

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Definicje. Algorytm to:

Rekurencja (rekursja)

Wykład 4. Tablice. Pliki

System operacyjny Linux

Jerzy Nawrocki, Wprowadzenie do informatyki

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

PROLOG INNE PRZYKŁADY MACIEJ KELM

Technika cyfrowa Synteza układów kombinacyjnych (I)

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie w Logice Środowisko programowania i dialog z systemem (Lista 0)

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Oczywiście plik musi mieć rozszerzenie *.php

Technika cyfrowa Synteza układów kombinacyjnych

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Języki programowania Prolog

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

Jerzy Nawrocki, Wprowadzenie do informatyki

Programowanie w logice

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Zadanie nr 3: Sprawdzanie testu z arytmetyki

Programowanie deklaratywne

Część 4 życie programu

EGZAMIN MATURALNY Z INFORMATYKI

Warunki logiczne instrukcja if

Spis treści. 1 Moduł Modbus TCP 4

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

PROLOG: WEJŚCIE/WYJŚCIE I FUNKCJE WBUDOWANE. Autor: Mateusz Chojnacki

Programowanie komputerowe. Zajęcia 4

Deklarowania faktów dotyczących obiektów i związków między nimi. Definiowania reguł dotyczących obiektów i związków między nimi.

Sztuczna inteligencja: zbiory rozmyte

Programowanie w logice Wykład z baz danych dla

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Programowanie w Logice

1 Moduł Modbus ASCII/RTU 3

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Język C++ Różnice między C a C++

Język C, tablice i funkcje (laboratorium)

BASH - WPROWADZENIE Bioinformatyka 4

SZTUCZNA INTELIGENCJA

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

n, m : int; S, a, b : double. Gdy wartości sumy składowej nie można obliczyć, to przyjąć Sij = 1.03 Dla obliczenia Sij zdefiniować funkcję.

Przestrzenne bazy danych Podstawy języka SQL

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Obliczenie pola wieloboku na podstawie współrzędnych wierzchołków

Wskaźniki. Programowanie Proceduralne 1

Funkcje zawarte w bibliotece < io.h >

Sztuczna inteligencja : Zbiory rozmyte cz. 2

Programowanie deklaratywne

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Wykład 0 Informacje Podstawowe

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

PRACOWNIA INFORMATYCZNA CHARAKTERYSTYKA PRZEDMIOTU BASH - PODSTAWOWE INFORMACJE

Funkcje zawarte w bibliotece < io.h >

Wykład 2 Składnia języka C# (cz. 1)

Laboratorium Algorytmy Obliczeniowe. Lab. 9 Prezentacja wyników w Matlabie

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Pliki. Informacje ogólne. Obsługa plików w języku C

Programowanie w Turbo Pascal

Kier. MTR Programowanie w MATLABie Laboratorium

Prezentacja do pobranie:

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

Laboratorium nr 5: Mnożenie wektorów i macierzy

JAVAScript w dokumentach HTML (1)

Transkrypt:

Programowanie w logice PROLOG cz.3 Predykat sprawdzający, czy podana lista stanowi początek innej listy: poczatek([],[_ _]). poczatek([h1 T1], [H2 T2]) :- H1 = H2, poczatek(t1,t2). ------------------------------------------------------------------------ poczatek([],x). poczatek([h1 T1],[H1 T2]):-poczatek(T1,T2). Procedura znajdująca ostatni element listy: ostatni([h], H). ostatni([_ T], O) :- ostatni(t, O). Predykat wbudowany: last Procedura znajdująca największy element w liście: max([x], X). max([h T], X) :- max(t, X1), X1 > H, X is X1. max([h T], X) :- max(t, X1), X1 < H, X is H. ---------------------------------------------------------------- max([], 'Brak elementów w liście'). max(l, W) :- sort(l, L1), last(l1, W). Procedura sprawdzająca, czy kolejne elementy listy tworzą ciąg ściśle rosnący: rosnacy([_]). rosnacy([g [H T]]) :- G < H, rosnacy([h T]). Procedura znajdująca n-ty element w liście: nty(x,[x _],1). nty(x,[_ T],N) :- nty(x,t,n1), N is N1+1. Predykat wbudowany: nth1 1

Predykat odcięcia cut (! ) Cut Cut bezargumentowy predykat jest interpretowany logicznie jako zawsze prawdziwy i służy do ograniczania nawrotów. Realizacja tego predykatu, występującego jako jeden z podcelów w ciele klauzuli, uniemożliwia nawrót do któregokolwiek z poprzedzających go podcelów przy próbie znajdowania rozwiązań alternatywnych. Wszystkie zmienne, które zostały ukonkretnione podczas realizacji poprzedzających odcięcie podcelów w ciele klauzuli, zachowują nadane im wartości w trakcie realizacji występujących po predykacie odcięcia warunków. Odcięcie nie ma wpływu na nieukonkretnione zmienne występujące w następujących po nim podcelach. Przykład wykorzystania odcięć w Prologu Obliczanie maksimum Klauzula max(x,y,max) ma zwracać spośród dwóch wartości X i Y wartość większą jako Max. Definicja 1 Definicja 2 Przykład wykorzystania odcięć w Prologu silnia(0,1) :-!. silnia(x,y) :- N is X-1, silnia(n,b), Y is X*B. Max=X, o ile X jest większe lub równe Y lub Max=Y, o ile X jest mniejsze od Y. Zapis w Prologu: max(x,y,x) :- X>=Y. max(x,y,y) :- X<Y. Max=X, o ile X jest większe lub równe Y, w przeciwnym przypadku Max=Y. Zapis w Prologu: max(x,y,x) :- X>=Y,!. max(x,y,y). Użycie odcięcia powoduje, że w przypadku, gdy realizacja warunku brzegowego kończy się sukcesem (dla X=0), próba realizacji procedury rekurencyjnej w ogóle nie zostanie podjęta. Wpływ na nawracanie repeat generowanie wielu rozwiązań danego problemu poprzez wymuszanie nawrotów a(1). a(2). a(3). a(4).?-repeat, a(x),write(x), X==3,!. 123 X=3 Predykat fail fail powoduje niepowodzenie wykonywania klauzuli. Wykonanie tego predykatu zawsze zawodzi. Najczęściej używany w celu wymuszenia nawrotów. Użyty w kombinacji z cut (!,fail) zapobiega użyciu innej klauzuli przy próbie znalezienia rozwiązań alternatywnych, co oznacza niepowodzenie wykonywania całej procedury. 2

Czytanie i pisanie znaków: get(x) umożliwiają pobranie pojedynczych znaków z bieżącego urządzenia wejściowego?-get(x). : a X=97. put(x) powoduje wypisanie do bieżącego urządzenia wyjściowego znaku, którego reprezentację w kodzie ASCII stanowi zmienna X?- put(104),put(101),put(108),put(108),put(111). hello Czytanie i pisanie termów: write(x) powoduje wypisanie termu (jeśli X jest ukonkretniona z prologowym termem) do bieżącego urządzenia wyjściowego (domyślnie monitor)?-write( hallo ). hallo?-write( hallo ). [104,97,108,108,111] display(x) równoważny predykatowi write z różnicą dotyczącą traktowania operatorów?-display(a*b+c*d). +(*(a,b),*(c,d))?-write(a*b+c*d). a*b+c*d read(x) w przypadku, gdy zmienna X jest nieukonkretniona, spowoduje ukonkretnienie tej zmiennej termem wczytanym z bieżącego urządzenia wejściowego read, write Czytanie i pisanie do plików: tell(x) ze zmienną X ukonkretnioną nazwą pliku kojarzy bieżące urządzenie wejściowe z plikiem o podanej nazwie, przygotowując go do operacji pisania (otwarcie pliku) Jeśli X ozn. nazwę pliku istniejącego, to poprzednia jego zawartość zostanie usunięta. W przypadku pliku nie istniejącego, zostanie on utworzony. append(x) otwarcie pliku do zapisu, bez usunięcia zawartości pliku (dopisanie) told zamknięcie pliku 3

Wprowadzenie przez użytkownika elementów listy i zapisanie ich do pliku. pisz_plik :- write('podaj listę:'), read(l1), tell('plik.txt'), /*append*/ write(l1), write(.), nl, told. see(x) - ze zmienną X ukonkretnioną nazwą pliku kojarzy bieżące urządzenie wejściowe z plikiem o podanej nazwie, przygotowując go do operacji czytania (otwarcie pliku) seen - zamknięcie pliku Odczytanie elementów listy liczbowej z pliku, obliczenie i wyświetlenie ich sumy czytaj_plik :- write('czytam z pliku...'), nl, see('przyk.txt'), read(l), seen, write('suma elementow listy z pliku wynosi:'), sumlist(l,suma), write(suma). Predykaty dynamicznej zmiany pamięci: asserta(x) umożliwia dołączenie do bazy danych na początek klauzuli, którą jest ukonktretniona zmienna X assertz(x) umożliwia dołączenie do bazy danych na koniec klauzuli, którą jest ukonktretniona zmienna X retract(x) usunięcie z bazy danych pierwszej klauzuli dającej się uzgodnić z argumentem predykatu np. asserta(student(adam,kowalski,s12345)). retract(film(ziemia_obiecana,wajda)). consult(x) - umożliwia rozszerzenie prologowej bazy danych o zbiór klauzul zawartych w określonym pliku lub wprowadzanych bezpośrednio z klawiatury. Klauzule odczytywane z danego pliku są dołączane na koniec bazy danych. Np. consult( dane.txt ). 4

Przynależność do zbioru (member) nalezy_do_listy(x,[x _]). nalezy_do_listy(x,[_ Y]):- nalezy_do_listy(x,y). Zawieranie się zbiorów (subset) podzbior([],y). podzbior([a X],Y):-nalezy_do_listy(A,Y), podzbior(x,y). Część wspólna zbiorów (intersect) czesc_wspolna([],x,[]). czesc_wspolna([x R],Y,[X Z]):- nalezy_do_listy(x,y),!, czesc_wspolna(r,y,z). czesc_wspolna([x R],Y,Z):- czesc_wspolna(r,y,z). Suma zbiorów (union) suma_zb([],x,x). suma_zb([x R],Y,Z):-nalezy_do_listy(X,Y),!, suma_zb(r,y,z). suma_zb([x R],Y,[X Z]):-suma_zb(R,Y,Z). Różnica zbiorów (difference) roznica([],_,[]). roznica([x L],Set,[X Z]):- not(member(x,set)),!, roznica(l,set,z). roznica([_ L],Set,Z):-roznica(L,Set,Z). Literatura W. Clocksin, C. Mellish, Prolog. Programowanie E.Gatnar, K.Stąpor, Prolog G.Brzykcy, A.Meissner, Programowanie w prologu i programowanie funkcyjne M. Ben-Ari, Logika matematyczna w informatyce 5