Il primo passo: I basilari del Prolog

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
LINGUAGGIO DI PROGRAMMAZIONE C
Sistemi Operativi - Vi 1 Il sistema operativo LINUX Leditor vi Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.
Lezione 1 Primi passi in HtML SCRIVERE TESTI di Sergio Capone
Tipi di dato astratti Lista, Pila, Coda, Albero.
PHP.
Sintassi (prima parte)
Linguaggi di programmazione
Algoritmi e Programmazione
Query OQL e XQUERY a confronto
Linguaggi di Programmazione (AA 2002/2003)
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Sistemi basati su conoscenza Esercizi Prolog
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Variabili e tipi primitivi Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
CORSO DI INFORMATICA LAUREA TRIENNALE-COMUNICAZIONE & DAMS
PHP – Un’introduzione Linguaggi e Traduttori 2003 Facoltà di Economia
Fondamentidi Programmazione Corso: Fondamenti di Programmazione Classe: PARI-DISPARI Docente: Prof. Luisa Gargano Testo: Aho, Ulman, Foundations of Computer.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Programmazione Corso di laurea in Informatica
Programmazione logica
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
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.
Argomenti della lezione
Corso di PHP.
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Creare pagine web Xhtlm. Struttura di una pagina.
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.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Interrogare il database
Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)
Fondamenti di Programmazione
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Linguaggi e Modelli di Programmazione Fabio Massimo Zanzotto.
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.
Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)
Introduzione a Javascript
Rappresentazione degli algoritmi
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Carluccio Antonio Carluccio Alessandra Caricola Giovanni Vizzino Anna Università degli Studi di Bari.
PRIMI ELEMENTI DI PROGRAMMAZIONE
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio PROLOG.
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Interpreti e compilatori
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Copyright © Istituto Italiano Edizioni Atlas
Intelligenza artificiale.. un assaggio. elementi struttura condizioni Cifre (9,8 … 0) Non ci sono riporti Riporto colonna unità Riporto colonna decine.
Fondamenti di informatica T-A Esercitazione 2 : Linguaggio Java, basi e controllo del flusso AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
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.
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Transcript della presentazione:

Il primo passo: I basilari del Prolog Fabio Massimo Zanzotto (slides realizzate da Andrea Turbati)

Elementi del Prolog Termini Predicati Clausole (Fatti e Regole) Programma logico

Termini Atomi: nomi che iniziano con lettera MINUSCOLA, sequenze di caratteri tra ‘ ’, numeri preceduti da caratteri andrea ‘Corso di Prolog’ c1p8 Numeri 12345 Variabili: nomi che iniziano con lettera MAIUSCOLA o con _ Tizio _andrea _ Termini composti somma(1, 2, X) 1+2

Predicati Espressi tramite la notazione f(t1, …, tn ) f è un atomo che prende il nome di funtore t1, …, tn sono gli argomenti e sono dei termini (predicato f con n argomenti, ha arità n)

Clausole Le clausole: fatti e regole I fatti sono regole senza corpo parent(ben, jim). friend(luke, daisy). Regole: grandparent(X,Y):- parent(X,Z), parent(Z,Y).

Regole Head :- Body . significa che affinché la Head sia vera deve essere vero il Body (e quindi i predicati che lo compongono) Nel Body ci sono 1 o più predicati separati da , (and) o da ; (or) Ogni regola termina con .

Fatti Un fatto è un predicato seguito da . Un fatto può essere composto da più termini amico(fratello(alice, X), bob).

Programma logico Insieme di regole/fatti Risponde alle query con o true o false e assegna dei valori alle variabili

Esempio: Famiglia parent(anne, bill). parent(anne, charlie). parent(bill, donnie). grandparent(X,Y):- parent(X,Z), parent(Z,Y).

Esempio: Famiglia Query: Risposta: Query ?- parent(anne, X). ?- parent(anne, bill). Risposta: true Query ?- parent(anne, X). X=bill (premo ; ) X = charlie false

Esempio: Famiglia Query: Risposta: ?- parent(X, Y). X=anne, Y=bill (premo ; ) X=anne, Y=charlie X=bill, Y=donnie false

Esecuzione del programma Prolog cerca nel proprio database di regole e fatti, quelli che soddisfano la nostra query, istanziando le variabili Ogni variabile, una volta istanziata (unificata), non può assumere un secondo valore (a differenza dei linguaggi classici di programmazione, come Java, C, C++, ecc)

Esempio Dati i fatti: parent( pam, bob). E le regole father(X,Y):- parent( bob, tom). parent( tom, ann). parent( bob, jerry). female(pam). male(bob). male(tom). female(ann). male(jerry). E le regole father(X,Y):- male(X), parent(X,Y). mother(X,Y):- female(X), ?- mother(ann,X).

Esempio E le regole father(X,Y):- male(X), parent(X,Y). mother(X,Y):- female(X),

Esempio Che risposta ho alle seguenti interrogazioni? ?- mother(X,Y). ?- father(X,Y). ?- mother(X,ann). ?- father(X,ann). ?- mother(ann,X).

L’interprete Prolog SWI-Prolog http://www.swi-prolog.org/ ha la licenza Lesser GNU Public License contiene un basilare editor di sviluppo (poco più che un semplice editor di test) Funziona su windows, linux e mac

Comandi utili edit. consult('nome_file'). reconsult(‘nome_file’) . apre l’editor per modificare/aggiungere fatti e regole al file in esame consult('nome_file'). carica un file con i suoi dati reconsult(‘nome_file’) . ricarica il file con i suoi dati trace / notrace . abilita / disabilita la stampa di tutti i passaggi intermedi (molto utile per seguire lo svolgersi del programma)

Ordine dei predicati nelle regole Vedere l’esempio contenuto in prolog-1.pl Provare le query ( * è 1,2,3 e 4): pred*(pam, ann). pred*(pam, andrea).

Documentazione sul prolog Nel sito http://www.swi-prolog.org/pldoc/ c’è la documentazione sulle varie regole già presenti in prolog Simboli usati: + termine che deve essere già istanziato - termine che viene istanziato dalla regola ? termine che può o meno essere già istanziato

Esempi documentazione member(?Elem, ?List) True if Elem is a member of List. The SWI-Prolog definition differs from the classical one. Our definition avoids unpacking each list element twice and provides determinism on the last element get(+Stream, -Char) Read the next non-blank character from Stream.

Esercizio Scrivere un programma Prolog che rappresenta un grafo tramite il fatto edge(A,B) per indicare che A e B sono connessi Interrogare il programma realizzato per avere tutti i nodi raggiungibili partendo da b: ?- path(b, X). b c a d e f

Prolog È un linguaggio di programmazione logica È un linguaggio dichiarativo Si basa su una restrizione delle logica del primo ordine (Horn Clauses)

Linguaggio dichiarativo Indica “cosa” serve per arrivare alla soluzione desiderata, ma non il “come”, cioè l’implementazione utilizzata Si contrappone ai linguaggi imperativi e procedurali (Java, C, C++, ecc)