Programowanie deklaratywne

Podobne dokumenty
Programowanie deklaratywne

Prolog przetwarzanie list. Maciej Krzywonos Łukasz Dajcz

Programowanie deklaratywne

Programowanie w logice Prolog 2

Programowanie deklaratywne

Programowanie w logice

Programowanie deklaratywne

Programowanie w logice

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.

Programowanie w logice Prolog 1

Projekt 4: Programowanie w logice

PODSTAWY SZTUCZNEJ INTELIGENCJI

Programowanie w Logice

Programowanie deklaratywne

Programowanie w Logice Struktury danych (Lista 2)

Odwrotna Notacja Polska

Prolog. Materiały do wykładu Komputerowe Przetwarzanie Wiedzy Tomasz Kubik

Metody Kompilacji Wykład 3

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Prolog struktury danych oraz obliczenia. 1. Arytmetyka?- Y is 2+2. Y = 4. ?- 5 is 3+3. false. ?- Z is (3.9 / 2.1). Z =

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Gramatyki atrybutywne

Języki programowania Prolog

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

ForPascal Interpreter języka Pascal

Wstęp do informatyki- wykład 2

Dziedziczenie jednobazowe, poliformizm

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Laboratorium nr 3 - Sztuczna Inteligencja Listy i operacje na listach

Arytmetyka liczb binarnych

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

Języki programowania deklaratywnego

Przykładowe dowody formuł rachunku kwantyfikatorów w systemie tabel semantycznych

Algorytmika i Programowanie VBA 1 - podstawy

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Podstawy programowania skrót z wykładów:

Języki i paradygmaty programowania

Warunki logiczne instrukcja if

Prolog (Pro-Logic) Programowanie w Logice. Dr inż. Piotr Urbanek

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

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Rachunek zdań. Zdanie w sensie logicznym jest to wyraŝenie jednoznacznie stwierdzające, na gruncie reguł danego języka, iŝ tak a

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Języki programowania zasady ich tworzenia

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

WYRAŻENIA ALGEBRAICZNE

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Definicje wyższego poziomu

Zadanie 1. Potęgi (14 pkt)

Algorytmy i struktury danych. Wykład 4

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

PLAN PRACY ZAJĘĆ WYRÓWNAWCZYCH Z MATEMATYKI W KLASIE I LO

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

EGZAMIN MATURALNY Z INFORMATYKI WYBRANE: ... (system operacyjny) ... (program użytkowy) ... (środowisko programistyczne)

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

Arkusz kalkulacyjny. Technologia Informacyjna Lekcja 38-39

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

3.2. RÓWNANIA I NIERÓWNOŚCI LINIOWE.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.

Wprowadzenie do logiki Zdania, cz. III Język Klasycznego Rachunku Predykatów

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

14. Grupy, pierścienie i ciała.

1.1 Definicja. 1.2 Przykład. 1.3 Definicja. Niech G oznacza dowolny, niepusty zbiór.

ZMIENNE. Podstawy PHP

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13

Plan wynikowy z wymaganiami edukacyjnymi z matematyki w zakresie podstawowym dla klasy 1 zsz Katarzyna Szczygieł

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

PROLOG INNE PRZYKŁADY MACIEJ KELM

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a);

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Cw.12 JAVAScript w dokumentach HTML

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Mikrokontroler ATmega32. Język symboliczny

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

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

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

ZALICZENIE WYKŁADU: 30.I.2019

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Programowania w Javie

JAVAScript w dokumentach HTML - przypomnienie

Odczyt danych z klawiatury Operatory w Javie

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Podstawy programowania funkcjonalnego

Jarosław Wróblewski Matematyka Elementarna, zima 2013/14. Czwartek 21 listopada zaczynamy od omówienia zadań z kolokwium nr 2.

Podstawowe struktury algebraiczne

FUNKCJE. (odwzorowania) Funkcje 1

Analiza semantyczna. Gramatyka atrybutywna

Język C zajęcia nr 11. Funkcje

WEKTORY I MACIERZE. Strona 1 z 11. Lekcja 7.

Transkrypt:

Programowanie deklaratywne Artur Michalski Informatyka II rok Plan wykładu Wprowadzenie do języka Prolog Budowa składniowa i interpretacja programów prologowych Listy, operatory i operacje arytmetyczne ZłoŜone/abstrakcyjne struktury danych Sterowanie mechanizmem nawrotów Operacje wejścia/wyjścia w Prologu Predefiniowane procedury prologowe Styl i technika programowania w Prologu 1

Listy, operatory i operacje arytmetyczne Reprezentacja list w Prologu Notacja operatorów Operacje arytmetyczne w Prologu Reprezentacja list w Prologu Lista to dowolnej długości ciąg obiektów zapisywany w postaci: [element1,element2,...] Reprezentacja wewnętrzna listy odpowiada strukturze drzewiastej:. funktor termu tworzącego listę element1 element2.... [] lista pusta 2

Reprezentacja list w Prologu Budowa listy (niepustej): głowa - pierwszy element listy, ogon - pozostałe elementy listy Własności: Głową listy moŝe być dowolny obiekt języka Prolog np. inna lista, term, zmienna Ogon listy jest zawsze listą i moŝe być listą pustą Lista jest strukturą rekurencyjną - jeŝeli ogon jest niepusty, to równieŝ on składa się z głowy i z ogona Reprezentacja list w Prologu owe listy:?-hobby1=[muzyka,kuchnia], Hobby2=[narty,taniec], Lista=[tenis,Hobby1,film,Hobby2]. Hobby1=[muzyka,kuchnia], Hobby2=[narty,taniec], Lista=[tenis,[muzyka,kuchnia],film,[narty,t aniec]]. Elementem składowym listy moŝe być inna lista.?- Pets =.(dogs,.(cats,[])). Pets = [dogs, cats] Funktor. moŝe być wykorzystywany jawnie do tworzenia list. 3

Reprezentacja list w Prologu Alternatywna notacja list W prologu listy mogą być zapisywane w sposób odzwierciedlający ich budowę: [Head Tail] gdzie: Head - moŝe być ciągiem dowolnych elementów (termów) oddzielonych przecinkiem, a Tail - dowolna listą elementów [a,b,c] = [a [b,c]] = [a,b [c]] = [a,b,c []] Operacja sprawdzania przynaleŝności elementu do listy Klauzula member(x,l) ma być prawdziwa, jeŝeli element X naleŝy do listy L. owo: member(b,[a,b,c]) - powinno być prawdziwe member(b,[a,[b,c]])- powinno być fałszywe, ale member([b,c],[a,[b,c]]) - powinno być prawdziwe Definicja X naleŝy do listy L, o ile X jest głową listy L lub X naleŝy do ogona listy L. Zapis w Prologu: member(x,[x Tail]). member(x,[head Tail]):- member(x,tail). 4

Operacja łączenia (konkatenacji) list Klauzula conc(l1,l2,l3) łączy listę L1 z listą L2 w listę wynikową L3. y conc([a,b],[c,d],[a,b,c,d]) - jest prawdziwe conc([a,b],[c,d],[a,b,a,c,d])- jest fałszywe Definicja JeŜeli lista L1 jest pusta, to lista L3 jest taka sama jak lista L2. JeŜeli lista L1 jest niepusta i ma postać [H T1], to lista L3 ma postać [H T2], gdzie T2 jest połączeniem list T1 i L2. Operacja łączenia (konkatenacji) list c.d. Zapis konkatenacji w Prologu: conc([],l,l). conc([h T1],L2,[H T2]):- conc(t1,l2,t2). H H L1 T1 T1 T2 [H T2] L2 L2 5

Operacja łączenia (konkatenacji) list c.d Zastosowanie operacji konkatenacji - dekompozycja listy:?- conc(l1,l2,[a,b,c]). L1=[] L2=[a,b,c]; L1=[a] L2=[b,c]; L1=[a,b] L2=[c]; L1=[a,b,c] L2=[]; No Operacja łączenia (konkatenacji) list c.d. Zastosowanie operacji konkatenacji - szukanie podlist:?- conc(przed,[sr Po], [pon,wt,sr,czw,pt,sob,nd]). Przed=[pon,wt] Po=[czw,pt,sob,nd] Zastosowanie operacji konkatenacji - szukanie poprzednika i następnika:?- conc(_,[przed,sr,po _], [pon,wt,sr,czw,pt,sob,nd]). Przed=wt Po=czw 6

Operacja łączenia (konkatenacji) list c.d. Zastosowanie operacji konkatenacji - usuwanie podlisty:?- L1=[a,b,z,z,c,z,z,z,d,e], conc(l2,[z,z,z _],L1). L1=[a,b,z,z,c,z,z,z,d,e] L2=[a,b,z,z,c] Zastosowanie operacji konkatenacji - inna wersjamember: member(x,l):- conc(l1,[x L2],L). albo: member(x,l):- conc(_,[x _],L). Zastosowanie operacji konkatenacji - inna wersjamember : member(b,[a,b,c]) conc(l1,[b L2],[a,b,c]) 1-sza klauzula conc 2-ga klauzula conc Uzgadnianie: Uzgadnianie: L1=[] L1=[X L1 ] [b L2]=[a,b,c] [b L2]=L2 [a,b,c]=[x L3 ] poraŝka, bo b a daje: X=a,L3 =[b,c] No conc(l1,[b L2],[b,c]) 1-sza klauzulaconc Uzgadnianie: L1 =[] [b L2]=[b,c] Yes daje: L2=[c] 7

Operacja dodawania elementu do listy Najprostszy wariant - dodać element na początku listy (nowa głowa listy). Zapis w Prologu: add(x,l,[x L]). Operacja usuwania elementu z listy Klauzula del(x,l,l1) ma być prawdziwa, jeŝeli lista L1 jest równa liście L pomniejszonej o element X. PołoŜenie elementu X jest dowolne. Definicja JeŜeli X jest głową listy L, to lista L1 jest ogonem listy L. JeŜeli X naleŝy do ogona listy L, to usuń stamtąd X. Zapis w Prologu: del(x,[x Tail],Tail). del(x,[h Tail],[H Tail1]):- del(x,tail,tail1). 8

Operacja usuwania elementu z listy c.d. Operacja del(x,l,l1) usuwa dowolne, ale tylko jedno wystąpienie X z listy L. Działanie takie określamy mianem niedeterminizmu predykatu.?- del(a,[a,b,a,a],l). L=[b,a,a]; L=[a,b,a]; L=[a,b,a]; No Inna niedeterministyczna klauzula: member(x,l). Operacja usuwania elementu z listy c.d. Zastosowanie operacji del(x,l,l1) - wstawianie elementu do listy:?- del(a,l,[1,2,3]). L=[a,1,2,3]; L=[1,a,2,3]; L=[1,2,a,3]; L=[1,2,3,a]; No Definicja w Prologu: insert(x,l,biggerl):- del(x,biggerl,l). 9

Operacje na podlistach Klauzula sublist(s,l) jest prawdziwa, jeśli lista S zawiera się w liście L. y sublist([c,d,e],[a,b,c,d,e,f]) - jest prawdziwe sublist([c,e],[a,b,c,d,e,f])- jest fałszywe Operacje na podlistach c.d. Analogia między klauzulą member(x,l) (w wersji z conc) a klauzulą sublist(s,l) L1 L1 L L S X L2 L2 [X L2] L3 member(x,l) sublist(s,l) 10

Operacje na podlistach c.d. Definicja Lista S naleŝy do listy L, o ile lista L składa się z dwóch list L1 i L2, a lista L2 jest połączeniem list S i L3. Zapis w Prologu sublist(s,l):- conc(l1,l2,l),conc(s,l3,l2).?- sublist(s,[a,b,c]). S=[]; S=[a]; S=[a,b]; S=[a,b,c]; S=[b];... Operacja generowania permutacji listy Klauzula permut(l1,l2) jest prawdziwa, jeśli lista L2 jest permutacją listy L1.?- permut([a,b,c],p). P=[a,b,c]; P=[a,c,b]; P=[b,a,c]; P=[b,c,a];... 11

Operacja generowania permutacji listy c.d. Klauzula permut(l1,l2) jest prawdziwa, jeśli lista L2 jest permutacją listy L1. Definicja JeŜeli pierwsza lista (L1) jest pusta, to druga lista (L2) równieŝ jest pusta. JeŜeli lista L1 jest niepusta, wtedy ma postać [X L], a jej permutacja powstaje w wyniku permutacji na L i wstawienia do niej X (w dowolne miejsce). Zapis w Prologu: permut([],[]). permut([x L],P):- permut(l,l1), insert(x,l1,p). Operacja generowania permutacji listy c.d. X L permutuj L L1 L1 jest permutacją L wstaw X otrzymując permutację X i L 12

Operacja generowania permutacji listy c.d. Inna wersja klauzuli permut(l1,l2) - z zastosowaniem klauzuli del: najpierw usuwamy element, na pozostałej reszcie dokonujemy permutacji i wstawiamy element na początek poddanej juŝ permutacji reszcie listy. Zapis w Prologu: permut([],[]). permut(l,[x P]):- del(x,l,l1), permut(l1,p).?- permut([red,blue,green],p). P=[red,blue,green]; P=[red,green,blue]; P=[blue,red,green];... Operacja generowania permutacji listy c.d. Uwaga! Operacja permutacji nie jest dokonała (obie wersje) i w pewnych przypadkach moŝe prowadzić do nieskończonych pętli. (prowadzący do błędów)?- permut(l,[a,b,c]). dla pierwszej wersji klauzuli permut (zinsert ) doprowadzi do zapętlenia, jeśli zaŝądamy dalszych odpowiedzi po wygenerowaniu wszystkich moŝliwych permutacji dla drugiej wersji (zdel ) - podana zostanie tylko jedna permutacja (pierwotna lista), a próba kontynuacji zakończy się zapętleniem 13

Notacja operatorów Standardowa reprezentacja operatorów w Prologu W Prologu operatory reprezentowane są w notacji prefiksowej. +(*(2,a),*(b,c)) WyraŜenia tworzą w reprezentacji wewnętrznej struktury drzewiaste (są termami), a operatory pełnią rolę funktorów (są atomami): * + * 2 a b c Notacja operatorów Standardowa reprezentacja operatorów w Prologu Dopuszczalna jest alternatywna reprezentacja operatorów w notacji infiksowej. 2*a + b*c WyraŜenia w notacji infiksowej przekształcane są automatycznie do postaci prefiksowej (i na odwrót). Pierwszeństwo operatorów decyduje o interpretacji wyraŝeń w notacji infiksowej. 14

Notacja operatorów Definiowanie operatorów w Prologu Prolog dopuszcza moŝliwość definiowania nowych operatorów. W celu zdefiniowania operatora korzystamy z specjalnej klauzuli systemowej zwanej równieŝ dyrektywą. Postać dyrektywy: op(<pierwszeństwo>,<składnia>,<symbol>) gdzie: <pierwszeństwo> - klasa pierwszeństwa operatora, <składnia> - budowa operatora (prefix, infix, suffix), <symbol> - oznaczenie operatora.?- op(600,xfx,has). MoŜna teraz zdefiniować fakt np.: piotr has auto. Notacja operatorów Definiowanie operatorów w Prologu c.d. Zasady: Definicja operatora nie określa Ŝadnej operacji, która będzie wykonywana na argumentach operatora Operatory definiowane w Prologu są tylko funktorami, słuŝącymi do konstruowania bardziej złoŝonych struktur Klasa pierwszeństwa operatora moŝe przyjmować wartości z zakresu od 1 do 1200 Oznaczenie operatora musi być nazwą (stałą symboliczną) 15

Notacja operatorów Definiowanie operatorów w Prologu c.d. Budowa składniowa operatora - notacje: prefiksowa: fx fy infiksowa: xfx xfy yfx postfiksowa: xf yf gdzie: f - to operator x - to argument o klasie pierwszeństwa <f y - to argument o klasie pierwszeństwa f Notacja operatorów Definiowanie operatorów w Prologu c.d. Zasady pierwszeństwa argumentów i operatora: Składnik wyraŝenia argument prosty argument w nawiasach operator argument złoŝony Klasa pierwszeństwa 0 0 wg definicji (dyrektywa op) wg pierwszeństwa operatora (funktora) głównego 16

Notacja operatorów Definiowanie operatorów w Prologu c.d. ZałóŜmy, Ŝe op(500,yfx,-). Reprezentacja wyraŝenia a-b-c to (a-b)-c, a nie a-(b-c). a - - c pierwsz. 0 b pierwsz. 500 a - pierwsz. 0 b pierwsz. 500 - c Notacja operatorów Definiowanie operatorów w Prologu c.d. op(900,fy,not). op(900,fx,not). not not p not (not p) not pierwsz. 900 not p pierwsz. 900 not pierwsz. 900 not p pierwsz. 900 not pierwsz. 900 (not p) pierwsz. 0 17

Notacja operatorów Definiowanie operatorów w Prologu c.d. WyraŜenie rachunku zdań (prawo de Morgana): ~ (A & B) <=> ~ A v ~ B Zapis w Prologu (standardowy,prefiksowy): equivalence(not(and(a,b)),or(not(a),not(b))). Zapis w Prologu (nowe operatory):?- op(800,xfx,<=>).?- op(700,xfy,v).?- op(600,xfy,&).?- op(500,fy,~). MoŜna teraz zdefiniować term: ~(A & B)<=> ~A v ~B. Notacja operatorów Definiowanie operatorów w Prologu c.d. Uwagi Definicje nowych operatorów nie określają Ŝadnych nowych działań na argumentach, lecz wzbogacają notację o nowe sposoby tworzenia złoŝonych form reprezentacji Operator o najwyŝszej klasie pierwszeństwa jest głównym operatorem wyraŝenia złoŝonego; operatory o niŝszej klasie pierwszeństwa mają natomiast silniejsze wiązanie Specyfika operatora zaleŝy zarówno od jego połoŝenia względem argumentów, jak i od zasad pierwszeństwa operatora oraz jego argumentów 18

Operacje arytmetyczne w Prologu Operacja przypisania w Prologu = (znak równości) operacja dopasowania (unifikacji) termów is operacja przypisania (ewaluacji wyraŝenia)?- X=1+2. Odpowiedź: X=1+2?- X is 1+2. Odpowiedź: X=3 term z funktorem + oraz argumentami 1 i 2 predefiniowana procedura ewaluacji wyraŝenia is Operacje arytmetyczne w Prologu Podstawowe operacje arytmetyczne w Prologu Oznaczenie operatora Operacja arytmetyczna + dodawanie - odejmowanie * mnoŝenie / dzielenie rzeczywiste // część całkowita z dzielenia mod reszta całkowita z dzielenia rem część ułamkowa z dzielenia ** lub ^ potęgowanie 19

Operacje arytmetyczne w Prologu Podstawowe operacje porównania w Prologu Oznaczenie operatora Operacja porównania > większy < mniejszy >= większy lub równy =< mniejszy lub równy =:= równy =\= róŝny \= termy się nie unifikują Operacje arytmetyczne w Prologu Operacja równości (=:=) a unifikacja (=) Operator = sprawdza dopasowanie dwóch obiektów i jeśli jest ono moŝliwe, prowadzi do wiązania zmiennych w tych obiektach (bez obliczania wartości wyraŝeń!). Operator =:= powoduje obliczenie wartości argumentów bez wiązania zmiennych (muszą być one juŝ związane).?- 1+2=:=2+1.?- 1+A=B+2. Yes A=2 B=1?- 1+2=2+1.?- 1+A=:=B+2. No ERROR:Arguments are not sufficiently instantiated 20

Operacje arytmetyczne w Prologu Zastosowanie operacji arytmetycznych Największy wspólny dzielnik dwóch liczb: dla dwóch liczb całkowitych, dodatnich X i Y, największy wspólny dzielnik D: równa się X, jeŝeli X i Y są równe, równa się największemu wspólnemu dzielnikowi X i Y-X, jeŝeli X<Y, równa się największemu wspólnemu dzielnikowi Y i X-Y, jeŝeli Y<X. Zapis w Prologu: nwd(x,x,x). nwd(x,y,d):- X<Y, Y1 is Y-X, nwd(x,y1,d). nwd(x,y,d):- Y<X, nwd(y,x,d). lub nwd(x,y,d):- Y<X, X1 is X-Y, nwd(x1,y,d). Operacje arytmetyczne w Prologu Zastosowanie operacji arytmetycznych c.d. Wyznaczyć długość listy termów. Długość listy: równa się 0, jeŝeli lista jest pusta, równa się długości jej ogona powiększonej o 1, jeŝeli lista jest niepusta. Zapis w Prologu: length([],0). length([_ Tail],N):- length(tail,n1), N is 1+N1. 21

Operacje arytmetyczne w Prologu Zastosowanie operacji arytmetycznych c.d. ciąg dalszy przykładu rozwaŝmy inny (błędny) zapis w Prologu: length([],0). length([_ Tail],N):- length(tail,n1), N = 1+N1. unifikacja! Zapytanie:?- length([a,b,[c,d],e],n). N = (1+(1+(1+(1+0)))) Właściwe zapytanie (w tej wersji length!):?- length([a,b,[c,d],e],n), L is N. N=(1+(1+(1+(1+0)))) L=4 Operacje arytmetyczne w Prologu Zastosowanie operacji arytmetycznych c.d. Podsumowanie Operacje z uŝyciem operatorów arytmetycznych wymagają zastosowania predefiniowanych procedur ewaluacji wyraŝenia Wykonanie operacji arytmetycznej jest moŝliwe jedynie po zastosowaniu proceduryis Operatory porównania równieŝ prowadzą do ewaluacji porównywanych wyraŝeń W trakcie ewaluacji wyraŝenia wszystkie argumenty muszą mieć przypisaną (związaną) wartość liczbową 22