La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)

Presentazioni simili


Presentazione sul tema: "Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)"— Transcript della presentazione:

1 Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)

2 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Fatti sul Prolog Linguaggio dichiarativo Non ha definizioni di tipi Non è possibile definire una specifica dei predicati Occorrono Predicati per controllare i tipi

3 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Il Prolog fornisce dei predicati per avere informazioni sui termini: –var(X). –nonvar(X). –atom(X). –integer(X). –float(X). –number(X). –atomic(X). vero sia per atomi che per numeri –compound(X). Controllare i termini

4 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Esempio di uso Definire la clausola /*count(X,L,NUM_VOLTE)*/ vera X è un atomo, L è una lista, e NUM_VOLTE è il numero di volte per cui C appare in L.

5 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Count: versione 0 count(_,[],0). count(A,[A|L],N):- count(A,L,N1), N is N1 + 1. count(A,[B|L],N):- A \= B, count(A,L,N).

6 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” count(_, [], 0). count(A, [A|L], N):- !, count(A, L, N1), N is N1 + 1. count(A, [_|L], N):- count(A,L,N). Count: versione 1

7 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” ?- count(a, [a,b,a,a],N). –N = 3 ?- count(a, [a,b,X,Y], N). –X=a Y=a N=3 ?- L=[a,b,X,Y], count(a, L,Na), count(b,L,Nb). Count: versione 0 e 1 X=a Y=a Na=3 Nb=1

8 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” count2(_, [], 0). count2(A, [B|L], N):- atom(B), A=B, !, count2(A, L, N1), N is N1 + 1. count2(A, [_|L], N):- count2(A,L,N). Count: versione 2

9 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” ?- count2(a, [a,b,a,a],N). –N = 3 ?- count2(a, [a,b,X,Y], N). –N=1 ?- L=[a,b,X,Y], count2(a, L,Na), count2(b,L,Nb). Count: versione 2 Na=1 Nb=1

10 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” SEGNO

11 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Fatti sul prolog Non controllo sui tipi e sulle definizione dei predicati Quindi, i termini e i predicati possono essere decomposti in liste.

12 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Prolog permette di scomporre un termine complesso (struttura dati) in una lista formata dal funtore e dai suoi argomenti. I tre predicati che permettono ciò sono: –=.. –functor –arg Costruire e decomporre i termini

13 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Si legge univ Viene usato come un operatore infisso ?Term =.. ?List f(a,b) =.. [f,a,b] ?- member(a,[a,b,c]) =.. List. –List=[member, a, [a,b,c]] ?- T =.. [rectangle,3,5]. –T = rectangle(3,5) =..

14 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Restituisce il funtore di un termine complesso functor(?Term, ?Name, ?Arity) ?- functor(t(f(X), Y, a), Fun, Arity ). –Fun = t Arity = 3 functor

15 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Esercizio: realizzare functor

16 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Restituisce l’argomento che si trova in una data posizione (a partire da 1) di un termine complesso arg(?Arg, +Term, ?Value) ?- arg(1, t(f(X), Y, a), Value). –Arg = f(X) arg

17 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Esercizio: realizzare arg

18 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” ?- functor(D, date, 3), arg(1, D, 15), arg(2, D, july), arg(3, D, 1950). D= date(15, july, 1950). Esempio functor e arg

19 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Fatti sul prolog Il principio fondamentale per il funzionamento è l’unificazione Ma esistono operatori binari?

20 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” In Prolog esistono vari operatori per il confronto –= –is –=:=confronto espressioni aritmetiche uguali –=\=confronto espressioni aritmetiche diverse –==uguaglianza, ma non assegnazione –\==disuguaglianza –@<ordinamento lessicografico Operatori di confronto

21 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Operatori di confronto Sono realizzabili attraverso dei predicati?

22 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Richiamo Un programma prolog è un: Insieme di regole e di fatti che Risponde alle query con o true o false e assegna dei valori alle variabili

23 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Prolog permette di aggiungere o rimuovere a runtime fatti e regole ATTENZIONE: i nuovi fatti vengo aggiunti solo in memoria e non al file che contiene i fatti di partenza Affinché sia possibile aggiungere un fatto bisogna indicare che questo è “dimamico”: –:-dynamic Fatto/Arity Controllare la conoscenza del prolog

24 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Per aggiungere i fatti esistono due predicati: –assertz(+Term) –asserta(+Term) assertz aggiunge il fatto alla fine del database asserta aggiunge il fatto all’inizio del database Aggiunta fatti

25 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Per rimuovere i fatti esistono due predicati: –retract(+Term) –retractall(+Head) retract rimuove il fatti dal databse retractall rimuove TUTTI i fatti e le regole che hanno la head indicata Rimozione fatti

26 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” ?- friend(tom, jerry). –false ?- assertz(friend(tom, jerry)). –true ?- friend(tom, jerry). –true ?-retract(friend(tom, jerry)). –true ?- friend(tom, jerry). –false Esempio assertz/retract

27 © A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Esistono alcune control facilities che facilitano la realizzazione dei programmi: –! (cut) –fail –true –not –call(P)ha successo se il predicato P ha successo –repeatha sempre successo anche durante il backtracking (utile per i loop) Control facilities


Scaricare ppt "Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)"

Presentazioni simili


Annunci Google