Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)

Slides:



Advertisements
Presentazioni simili
Automi temporizzati.
Advertisements

STRUTTURA DI.
Calcolo Relazionale.
Dalla macchina alla rete
Macchine di Turing e ricorsività generale
Linguaggi Regolari e Linguaggi Liberi
SPECIFICA LOOSE DELLE MAPPE FINITE v. 1.1 Gianna Reggio
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Architetture.
La scelta del paniere preferito
Linguaggi di Programmazione (AA 2002/2003)
SPIM Esercizi. Esercizio 1 – il comando li Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
1 Il punto di vista Un sistema è una parte del mondo che una persona o un gruppo di persone, durante un certo intervallo di tempo, sceglie di considerare.
Laboratorio Matematica e Informatica
Fondamenti di Informatica
Un istituto di ricerca deve decidere il numero di posti da mettere a concorso per l'assunzione di nuovi ricercatori di primo, secondo e terzo livello.
Esercizi di esonero (a.a. 2007/2008) Compito C, terzo esercizio Data una sequenza di caratteri s1 ed una stringa s2 diciamo che s1 è contenuta in s2 se.
Analisi e Sintesi di circuiti sequenziali
27+ 12= Risultato troppo grande = = 39 = -25 errore di overflow in binario =
LISP.
Modelli e Algoritmi della Logistica
Modelli e Algoritmi per la Logistica Branch & Bound Prof. Carlo Mannino Prof. Antonio Sassano Dipartimento di Informatica e Sistemistica Università di.
Reti combinatorie: moduli di base
Modelli e Algoritmi della Logistica
APPENDICE. Sintassi e semantica FOL (Firts Order Logic)
Analisi e Sintesi di circuiti sequenziali. Definizione Una macchina sequenziale é un sistema nel quale, detto I(t) l'insieme degli ingressi in t, O(t)
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Organizzazione del corso
Programmazione logica
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Conoscenza e ragionamento Logica dei predicati del primo ordine.
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Logica dei predicati del primo ordine.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Interfacciamento con mouse seriali
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
L’AUTOMA ESECUTORE Un automa capace di ricevere dall’esterno una descrizione dello algoritmo richiesto cioè capace di interpretare un linguaggio (linguaggio.
Programmazione in Java Claudia Raibulet
Una rete sequenziale asincrona è dotata di due
Cosa significa la parola funzione?
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Il primo passo: I basilari del Prolog
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Reti combinatorie: moduli di base
Fabio Massimo Zanzotto (slides di Andrea Turbati con aggiunte)
Strategie per il problem solving
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
La divisione di un polinomio
Linguaggi e Modelli di Programmazione Fabio Massimo Zanzotto.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (IV) SQL (Slide tratte in parte da da Atzeni, Ceri,
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.
Cenni di Logica Fabio Massimo Zanzotto. Calcolo proposizionale.
Introduzione alla regressione multipla
Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
MySQL Database Management System
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 3 - Modelli di fase d’analisi Ernesto Damiani Università degli Studi.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Automi temporizzati.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Lezione 6 - SQL. Linguaggi per DB Per interagire con le basi di dati occorre un linguaggio Linguaggio SQL (Structured Query Language), linguaggio standardizzato.
Problemi, algoritmi e programmazione
Approfondimenti SQL.
SQL Linguaggio per l’interrogazione di una base dati.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Transcript della presentazione:

Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Le strutture dati, anche complesse, sono alla base dei vari linguaggi di programmazione In Prolog è possibile creare ed utilizzarle in modo palese Strutture dati

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Un database può essere rappresentato in Prolog come un elenco di fatti Per comprendere come creare/usare le strutture dati in Prolog useremo i seguenti esempi: –Famiglia –Automa non deterministico –Problema delle 8 Regine Strutture dati

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Una famiglia può essere rappresentata da un fatto, family, con 3 argomenti: –Padre –Madre –Figli (tramite una lista) Gli elementi della famiglia sono delle persone (person), rappresentati a sua volta da dei termini complessi formati da 4 elementi: nome, cognome, data di nascita e salario Famiglia

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Rappresentazione della famiglia Smith family( person(bob, smith, date(7, may,1968),30000), person(ann, smith, date(18, july,1970),32000), [person(dave, smith, date(1, june,1984),0), person(edna, smith, date(25, may,1990),0)]). Famiglia

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Possiamo effettuare varie query, basandoci non solo sui valori ma anche sulla struttura stessa family(person(_,fox, _, _), _, _). si riferisce alla famiglia fox, usando solo il cognome del padre e nessun altra informazione Esiste un altro modo per riferirsi alla famiglia fox? Famiglia

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” family(_, _, [_,_,_]). Indica una famiglia con 3 figli Come si può indicare una famiglia con almeno 3 figli ? Creiamo ora delle regole più “generiche” che però si appoggiano sempre al termine family Famiglia

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” husband(X):- family(X, _, _). wife(X):- family(_, X, _). child(X):- family(_, _, Children), member(X, Children). Regole per family

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” exists(X):- husband(X) ; wife(X) ; child(X). salary(person(_, _, _, S), S). dateOfBirth(person(_, _, Date, _),Date). Regole per family

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” ?- exists(person(mario, rossi, _, _)). ?- exists(person(Name, Surname, _, _)). ?- child(X), dateOfBirth(X, date(_,_,Y)), Y < ?- exists(X), salary(X, Y), Y > Possibili query

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Automa non deterministico s4 s1 s3 s2 b b null a a b

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” final(s3). trans(s1, a, s1). trans(s1, a, s2). trans(s1, b, s1). trans(s2, b, s3). trans(s3, b, s2). trans(s1, a, s4). silent(s2, s4). silent(s3, s1). Automa non deterministico

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” accepts(State, []):- final(State). accepts(State, [X|Rest]):- trans(State, X, State1), accepts(State1, Rest). accepts(State, Rest):- silent(State, State1), accepts(State1, Rest). Automa non deterministico

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” ?- accepts(s1, [a,a,a,b]). –true ?- accepts(S, [a,b]). –S=s1; –S=s3; ?- accepts(s1, [X1,X2,X3]). –X1=a X2=a X3=b –… ?- String=[_,_,_], accepts(s1, String). –String = [a,a,b]; –… Query Automa

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Posizionare 8 regine su di una scacchiera vuota in modo che nessuna possa mangiare o essere mangiata da un’altra Esistono varie soluzione in Prolog, qui ne viene presentata una semplice con il minimo numero di variabili Problema delle 8 Regine

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” solution( [] ). solution( [X/Y | Others] ) :- % First queen at X/Y, other queens at Others solution( Others), member( Y, [1,2,3,4,5,6,7,8] ), noattack( X/Y, Others). % First queen does not attack others noattack( _, [] ). % Nothing to attack noattack( X/Y, [X1/Y1 | Others] ) :- Y =\= Y1, % Different Y-coordinates Y1-Y =\= X1-X, % Different diagonals Y1-Y =\= X-X1, noattack( X/Y, Others). % A solution template template( [1/Y1,2/Y2,3/Y3,4/Y4,5/Y5,6/Y6,7/Y7,8/Y8] ). 8 Regine

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Famiglia: –Scrivere la regola per avere le famiglie senza figli –Scrivere la regola per avere Il reddito totale di una famiglia –Scrivere la regola per avere le famiglie in cui i figli guadagnano più dei genitori Esercizi

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Automa: –Scrivere una regola che accetti lo stato iniziale e due numeri che rappresentino il numero minimo e massimo di transizioni (non nulle) che si possono fare. Tale regola dovrà accettare anche una variabile che conterrà la lista dei simboli di input usati per andare dallo stato iniziare a quello finale Esercizi

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” 8 Regine: –Modificare il programma per trattare un numero variabile di regine –Scrivere una nuova versione della soluzione al problema delle 8 regine Esercizi

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” In Prolog è possibile definire nuovi operatori, ma ne esistono già alcuni definiti (esempio gli operatori aritmetici) 1*2+3*4 ha i due operatori + e * la scrittura in Prolog sarebbe: –+(*(1,2), *(3,4)) Operatori * + *

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ogni operatore ha una sua priorità a + b*c come deve essere letto? –+(a, *(b,c) ? –*( +(a,b), c) ? Nel senso comune trasmessoci, * lega di più di +, Definire un operatore b c * + a ab c * +

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Definire un operatore Codificare la priorità: l’albero delle interpretazioni ha priorità decrescenti + ha priorità 500 * ha priorità 400 (e quindi + ha priorità più alta di *) b c * + a ab c * + a + b*c

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” :- op(Priorità, Tipo, Operatore). Priorità è un numero tra 0 e 1200 Tipo: –infisso : xfx, xfy, yfx –prefisso: fx, fy –postfisso: xf, fy Operatore: il nome/simbolo dell’operatore Definire un operatore

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Il tipo serve ad indicare anche la precedenza degli operatori: –x : la sua priorità deve essere minore di quella dell’operatore –y: la sua priorità deve essere minore o uguale a quella dell’operatore :- op(700, yfx, somma). Qual è l’albero risultante di –9 somma 5 somma 7 ? Definire un operatore

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” :- op(700, yfx, somma). 9 somma 5 somma 7 Quello a sinistra è corretto, perché? Definire un operatore ab c somma b c a

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Esercizio Studiamo la sintassi della lingua Realizziamo gli operatori «ha» e «di», di modo che con frasi: mario ha la macchina di dario giovanni ha il cestino di mario Risponda a interrogazioni come Chi ha Cosa di X

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Definire la regola max(A, B, Max) in modo che in Max ci vada il massimo tra A e B Pensare anche al caso: –max(A, 5, 9) –A = 9. Esercizio