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

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Definitezza Vogliamo poter richiedere la “definitezza” delle funzioni
SQL applicato a SQL Server
PHP.
Linguaggi di programmazione
Algebra parziale con predicati
Type Checking (1° parte)
Generazione di Codice Intermedio
Query OQL e XQUERY a confronto
Introduzione al linguaggio C
Anno accademico Gli operatori e le espressioni in C.
Il linguaggio C Gli operatori e le espressioni C Language
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Esercizi Prolog
Risore sul web (JavaScript) tm
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Assegnamento di valore a una variabile Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
LISP.
APPENDICE. Sintassi e semantica FOL (Firts Order Logic)
Linguaggio di programmazione C (Introduzione alla programmazione)
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Intelligenza Artificiale II Dimostrazione automatica di Teoremi
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Programmazione Corso di laurea in Informatica
1 laboratorio di calcolo II AA 2003/04 seconda settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
Programmazione logica
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Il Linguaggio C.
Le funzioni.
Java base I: Sintassi e tipi di dati
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
Programmazione in Java Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
4 Tipi di dati & variabili
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Il primo passo: I basilari del Prolog
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Fabio Massimo Zanzotto (slides di Andrea Turbati con aggiunte)
Strategie per il problem solving
Basi di conoscenza: cenni di logica Fabio Massimo Zanzotto.
Linguaggi e Modelli per i Dati e la Conoscenza Fabio Massimo Zanzotto.
Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)
FMZ 1 Sistemi basati su conoscenza Costruzione automatica di ontologie di dominio Dott. Fabio Massimo Zanzotto a.a
Fondamenti di Programmazione
Linguaggi e Modelli di Programmazione Fabio Massimo Zanzotto.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
Ordinamento e Operazioni su Strutture Dati Fabio Massimo Zanzotto.
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Percorsi su grafi, Sottoalberi Comuni e Programmazione Dinamica Fabio Massimo Zanzotto.
FMZ Sistemi basati su conoscenza Prolog (1) Dott. Fabio Zanzotto a.a
Cenni di Logica Fabio Massimo Zanzotto. Calcolo proposizionale.
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Introduzione a Javascript
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio PROLOG.
Laboratorio Informatico
Informatica e Informatica di Base
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Approfondimenti SQL.
Basi di conoscenza: cenni di logica Fabio Massimo Zanzotto.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Esercizi.
Transcript della presentazione:

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

© 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

© 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

© 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.

© 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 N count(A,[B|L],N):- A \= B, count(A,L,N).

© 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 N count(A, [_|L], N):- count(A,L,N). Count: versione 1

© 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

© 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 N count2(A, [_|L], N):- count2(A,L,N). Count: versione 2

© 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

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

© 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.

© 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

© 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) =..

© 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

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

© 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

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

© 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

© 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?

© 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 lessicografico Operatori di confronto

© 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?

© 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

© 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

© 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

© 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

© 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

© 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