Corso di Intelligenza Artificiale

Documenti analoghi
Corso di Intelligenza Artificiale. Esercizio 1

Prolog, Alberi SLD e SLDNF. Scopo: 1. Semplici esercizi sul Prolog 2. Esercizi su alberi di risoluzione SLD e SLDNF

Prolog. Istruzioni su SICStus. Esercitazione del 6 Giugno Scopo: Com è organizzata l esercitazione:

Scopo: 1. Acquisire conoscenza dell ambiente SWI Prolog 2. Risolvere alcuni problemi mediante il linguaggio Prolog

1. Acquisire conoscenza dell ambiente TuProlog/SWI Prolog 2. Risolvere alcuni problemi mediante il linguaggio Prolog

3 #3: 20 10:50:05 MET

1. Acquisire conoscenza dell ambiente TuProlog/SWI Prolog 2. Risolvere alcuni problemi mediante il linguaggio Prolog

1. Acquisire conoscenza dell ambiente TuProlog/SWI Prolog 2. Risolvere alcuni problemi mediante il linguaggio Prolog

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 14 Gennaio 2016 Tempo a disposizione: 2 h Risultato: 32/32 punti

Esercizi su Prolog per Fondamenti di IA 2 Esercitazione

Esercizi di Programmazione Prolog

d. Cancellazione del valore 5 e. Inserimento del valore 1

FONDAMENTI DI INTELLIGENZA ARTIFICIALE (8 CFU) 13 Gennaio 2015 Tempo a disposizione: 2 h Risultato: 32/32 punti

Strutture dati non lineari. Esercitazione 3. Rappresentazione della Conoscenza Daniele Nardi, 2008Esercitazione 3 0

CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 13 Luglio 2017 Tempo a disposizione: 2 h Risultato: 32/32 punti

Esercizi proposti Risolvere i problemi seguenti su espressioni rappresentate come alberi binari, mediante la dichiarazione di tipo

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 1 parte (6 CFU)

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly

Laboratorio di Python

Laboratorio 09. Programmazione - CdS Matematica. Ivano Lauriola 16 gennaio 2018

Corso di Programmazione

Informatica A. Istruzioni

Esercizi proposti 10

Esercizi prolog. Si consiglia di utilizzare inoltre i libri consigliati e gli esercizi contenuti nel zip file fornito dal docente

Corso di Programmazione

Laboratorio di Python

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Gennaio

Algoritmi e Strutture Dati Laboratorio 15/12/2008. Daniele Loiacono

12 Function Handles e Ricorsione in MATLAB

Esercizi per il corso di Algoritmi, anno accademico 2011/12

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

Corso di Programmazione

Laboratorio di Python

PROVETTE D ESAME. Algoritmi e Strutture Dati

PARTE

COMPITO DI INTELLIGENZA ARTIFICIALE, Fondamenti di Intelligenza Artificiale e Intelligenza Artificiale Modulo A 16 Dicembre 2005 Tempo 2,30 ore

Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 26 Gennaio 2017 Tempo a disposizione: 2 h Risultato: 32/32 punti

Liste di Liste Matrici

Le liste sono una delle strutture dati primitive più diffuse nei linguaggi di programmazione per l'elaborazione simbolica (es(

Alberi ed Alberi Binari di Ricerca

Algoritmi e Principi dell'informatica

Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree

Tema A+B COGNOME E NOME. Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 4 Febbraio 2016

Esercizi proposti. pari(x) :- 0 is X mod 2.

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

Moltiplicazione veloce di interi

Alberi binari. Esercizi su alberi binari

Politecnico di Milano Facoltà di Ingegneria Milano Leonardo A.A. 2007/08

COMPITO DI INTELLIGENZA ARTIFICIALE (v.o.) PARTE I FONDAMENTI DI INTELLIGENZA ARTIFICIALE. 13 Dicembre 2006 (Tempo a disposizione 2h; su 32 punti)

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

Esercitazione 14 SQL

COMPITO DI FONDAMENTI DI INTELLIGENZA ARTIFICIALE INTELLIGENZA ARTIFICIALE (v.o.) PARTE I. 11 Settembre 2008 (Tempo a disposizione 2h ; su 32 punti)

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

FONDAMENTI DI INTELLIGENZA ARTIFICIALE Prof. Paola Mello- 12 Luglio 2018 Tempo a disposizione: 2 h Risultato: 32/32 punti

Università di Bologna

FONDAMENTI DI INTELLIGENZA ARTIFICIALE PRIMA PARTE (6 CFU) 9 Dicembre 2010 Tempo a disposizione 2h Risultato 32/32 punti

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Implementazione ADT: Alberi

23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica.

FONDAMENTI DI INTELLIGENZA ARTIFICIALE (8 CFU)

Esercizi su alberi binari

Laboratorio di Algoritmi e Strutture Dati

Esercizi

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Alberi. Definizioni principali

Esercizio. 2 i=i*2) j=j*2)

Fondamenti di Informatica T-1 Modulo 2

Divide et impera su alberi

Laboratorio 8. Programmazione - CdS Matematica. Mirko Polato 15 Dicembre 2015

Variabili indicizzate. Corso di Statistica Variabili indicizzate, sommatorie, produttorie. Sommatorie. Uso delle variabili indicizzate.

Alberi e alberi binari I Un albero è un caso particolare di grafo

Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree

Alberi e alberi binari I Un albero è un caso particolare di grafo

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1

Alberi Binari di Ricerca

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Alberi binari di ricerca

Alberi Binari di Ricerca

alla categoria di automi a minor potenza riconoscitiva possibile. }, dove k è un parametro.

Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

COMPITO DI FONDAMENTI DI INTELLIGENZA ARTIFICIALE INTELLIGENZA ARTIFICIALE (v.o.) PARTE I. 25 Giugno 2008 (Tempo a disposizione 2h ; su 32 punti)

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 13 Gennaio 2010 Tempo a disposizione 2h Risultato 32/32 punti

Casi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova

Note per la Lezione 4 Ugo Vaccaro

FONDAMENTI DI INTELLIGENZA ARTIFICIALE (8 CFU)

Alberi ed Alberi Binari

Transcript:

Esercizio 1 Si definisca un predicato in PROLOG chiamato maxlist che applicato ad una lista di liste di interi ListListInt dia come risultato la lista degli elementi massimi di ogni lista componente di ListListInt. Si definisca prima la versione ricorsiva e poi quella ricorsiva-tail. Esempio:?- maxlist([[3,10,2], [6,9],[1,2]], X). yes, X = [10,9,2] Soluzione: maxlist([],[]):-!. maxlist([x Y],[N T]):- max(x,n),maxlist(y,t). Versione ricorsiva max([x],x):-!. max([x T],X):- max(t,n),x>=n,!. max([x T],N):- max(t,n). Versione iterativa max([x T],M):- max(t,x,m). max([],m,m):-!. max([h T],MT,M):- H>MT,!,max(T,H,M). max([h T],MT,M):- max(t,mt,m). Esercizi Prolog 1

Esercizio 2 Data una lista L1 e un numero intero N, scrivere un predicato Prolog domanda1(l1,n,l2) che restituisca in L2 la lista degli elementi di L1 che sono liste contenenti solo due valori interi positivi fra 1 e 9 la cui somma valga N. Esempio: :- domanda1([[3,1],5,[2,1,1],[3],[1,1,1],a, [2,2]],4,L2). yes, L2 = [[3,1], [2,2]] Soluzione: domanda1([],_,[]). domanda1([[a,b] R ], N, [[A,B] S]):- A>=1, A=<9, B>=1, B=<9, N is A + B,!, domanda1( R,N,S ). domanda1([_ R], N,S ):- domanda1( R,N,S ). Esercizi Prolog 2

Esercizio 3 Si definisca un predicato in PROLOG chiamato averstud che applicato a un numero di matricola di uno studente Matr e a una lista di esami LE dia come risultato la media AV dei suoi voti. Ogni esame sia rappresentato da un termine della lista LE della forma esame(matr,esame,voto). Si definisca prima la versione ricorsiva e poi quella ricorsiva-tail. Esempio:?-averStud(s1,[esame(s2,f1,30), esame(s1,f1,27),esame(s3,f1,25), esame(s1,f2,30)], AV). yes, AV = 28.5 Esercizi Prolog 3

Soluzione: % versione ricorsiva averstud(s,l,av) :- totstud(s,l,n,t), N > 0, AV is T/N. totstud(_,[],0,0) :-!. totstud(s,[esame(s,_,v) R],N,T) :-!, totstud(s,r,nn,tt), N is NN + 1, T is TT + V. totstud(s,[_ R],N,T) :- totstud(s,r,n,t). % versione tail-ricorsiva averstud(s,l,av) :- totstud(s,l,0,n,0,t), N > 0, AV is T/N. totstud(_,[],n,n,t,t) :-!. totstud(s,[esame(s,_,v) R],NI,NO,TI,TO):-!, N is NI + 1, T is TI + V, totstud(s,r,n,no,t,to). totstud(s,[_ R],NI,NO,TI,TO) :- totstud(s,r,ni,no,ti,to). Esercizi Prolog 4

Esercizio 4 Un associazione di volontariato tiene traccia delle spese di cancelleria tramite un insieme di fatti Prolog del tipo: spesa(carta, 13). spesa(matite, 12). spesa(graffette, 5.99). spesa(carta, 12). Dove il primo parametro rappresenta l oggetto acquistato, ed il secondo l importo. Definire i seguenti predicati Prolog: 1. elenca(l), che deve restituire la lista degli item acquistati, senza ripetizione. Si usi a tal scopo il predicato setof. 2. subtotale(x, S), che ricevuto in ingresso un oggetto X, restituisce l ammontare della spesa per tale oggetto 3. totale(s), che restituisce quanto è stato speso in cancelleria. Ad esempio, i predicati (invocati sulla base di conoscenza presentata all inizio di questo esercizio) devono restituire:?- elenca(l). L = [carta,graffette,matite]??- subtotale(carta, S). S = 25??- totale(s). S = 42.99? Esercizi Prolog 5

Soluzione: Se si usa il predicato setof è scorretto a meno di utilizzare la quantificazione sulla variabile Y. elenca(l) :- setof( X, Y^spesa(X, Y), L). Oppure : elenca1(l1) :- findall( X, spesa(x, _), L), eliminarip(l,l1). eliminarip([],[]):-!. eliminarip([a Rest1], Rest3):- member(a,rest1),!,eliminarip(rest1,rest3). eliminarip([a Rest1], [A Rest3]):- eliminarip(rest1,rest3). subtotale(x, S) :- bagof(v, spesa(x, V), L), somma(l, S). totale(s) :- findall(v, spesa(_, V), L), somma(l, S). somma([], 0). somma([h T], S) :- somma(t, S1), S is S1 + H. Esercizi Prolog 6

Esercizio 5 Si scriva un programma Prolog che, prendendo in ingresso due liste L1 e L2, restituisca in uscita due liste L3 e L4 tali che L3 contenga gli elementi di L1 che appartengono anche a L2, mentre L4 contenga gli elementi di L1 che non appartengono a L2. Si supponga disponibile il predicato member. Si dica inoltre se il predicato così definito è ricorsivo tail. Esempio:?-list_mem([a,r,t],[t,s,m,n,a],L3,L4). restituirà L3=[a,t] e L4=[r]. Soluzione: list_m([],l2,[],[]). list_m([a Rest1],L2,[A Rest3],L4):- member(a,l2),!,list_m(rest1,l2,rest3,l4). list_m([a Rest1],L2,L3,[A Rest4]):- list_m(rest1,l2,l3,rest4). Il predicato è ricorsivo tail. Esercizi Prolog 7

Esercizio 6 Si scriva un predicato Prolog che data una lista ed un elemento El appartenente alla lista, restituisca in uscita l'elemento successivo ad El nella lista. Esempio:?- consec(3, [1,7,3,9,11],X). yes X=9 Nel caso in cui El sia l'ultimo elemento il predicato dovrà fallire. Soluzione consec(el, [El [X _]],X):-!. consec(el, [_ Tail],X):- consec(el,tail,x). Esercizi Prolog 8

Esercizio 7 Si scriva un predicato Prolog list_to_set a due argomenti che data una lista di liste come primo argomento leghi il secondo argomento a una lista nella quale sono state eliminate le liste ripetute o le loro permutazioni. Per esempio dato il goal:?-list_to_set([[1,2,3],[3,1,2],[1]], Y). si vuole ottenere: yes Y=[[3,1,2],[1]] Per esempio dato il goal:?-list_to_set([[1,2],[1,2],[1,2]], Y). si vuole ottenere: yes Y=[[1,2]] Si supponga dato il predicato permutation(x,y) che verifica se una lista X è una permutazione della lista Y. Soluzione list_to_set([],[]):-!. list_to_set([i R],[I R1]):- not member list(i,r),!, list_to_set(r,r1). list_to_set([i R],R1):- list_to_set(r,r1). member_list(x,[y _]):-permutation(x,y),!. member_list(x,[_ R]):-member_list(X,R). Esercizi Prolog 9

Esercizio 8 Si scriva un programma Prolog che data in ingresso una lista di liste con 2 elementi ciascuna ed una costante c1 restituisca in uscita due liste DX ed SX, la prima contenente gli elementi che nelle coppie compaiono a destra di c1, la seconda a sinistra. Soluzione coppie([],_,[],[]). coppie([[x,x] T],X,[X Td],[X Ts]) :-!, coppie(t,x,td,ts). coppie([[x,y] T],X,[Y Td],Ts) :-!, coppie(t,x,td,ts). coppie([[y,x] T],X,Td,[Y Ts]) :-!, coppie(t,x,td,ts). coppie([_ T],X,Td,Ts) :- coppie(t,x,td,ts). Esercizi Prolog 10

Esercizio 9 Scrivere un predicato Prolog che fornisce l ultimo elemento di una lista. Esercizio 10 Si definisca un predicato Prolog che calcola i massimi locali (esclusi gli estremi) di una lista, ad esempio: :- max_loc([5,4,7,2,3,6,1,2],x) yes, X=[7,6] Esercizio 11 Dare un programma in Prolog che definisca la relazione tra due liste di avere l'una lunghezza doppia dell'altra. Esercizio 12 Scrivere un predicato Prolog per verificare se una lista è palindroma Esercizio 13 Dato un albero binario, si scriva un predicato che calcola la profondità massima dell albero. Esercizio 14 Dare un programma in Prolog che definisca la relazione nodiinterni tra un albero binario e un naturale, tale che il numero naturale indichi il numero di nodi interni (non foglie) dell'albero Esercizio 15 Dati due alberi A1 ed A2 si scriva un predicato che verifica se A1 è un sottoalbero di A2. Esercizio 16 Data una matrice NxN rappresentata come lista di liste, si calcoli la somma degli elementi della diagonale principale. Esercizi Prolog 11

Esercizio 17 Una matrice M di bit n m, si dice matrice C-Grey se, j=1,,m- 1, la j-esima colonna della matrice differisce dalla colonna (j+1)- esima esattamente in un bit. Si realizzi un programma Prolog che, data M rappresentata come lista di colonne, risponda sì se M è C- Grey. Esercizio 18 Scrivere un predicato flatten che appiattisce una lista di liste. Ad esempio: :- flatten([1,a,[2,3],[],h,f(3),[c,[d,[e]]]],l). yes, L=[1,a,2,3,h,f(3),c,d,e] Esercizi Prolog 12