ALBERI SLD esercizi. Compito 14 Gennaio 2003 Si consideri il seguente programma Prolog, che calcola il minimo di una lista: min(A,B,A) :- A < B, !. min(A,B,B).

Slides:



Advertisements
Presentazioni simili
Premessa: si assume di aver risolto (correttamente
Advertisements

Process synchronization
Procedure e funzioni ricorsive
Linguaggi di programmazione
Algoritmi e Programmazione
Linguaggi di Programmazione (AA 2002/2003)
Risoluzione e Programmazione Logica (Prolog)
Soluzioni Esercizi 3 Numeri Interi.
Lez. 131 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Rappresentazione.
Durante la lezione del 14 dicembre ho scoperto un altro modo per utilizzare il programma iplozero: la creazione di alcuni esercizi di Brain training.
LE QUATTRO STAGIONI LA PRIMAVERA L’ESTATE L’INVERNO L’AUTUNNO.
Esempio 1: Calcolo del M.C.D.
Algoritmi e Dimostrazioni Stefano Berardi
Esercizi su alberi binari
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Cammini minimi Algoritmo SPT.Acyclic
Ricerca di minimi e massimi di funzioni
Algoritmi e Strutture Dati (Mod. B)
Esempi di possibili domande per il compito di esame 1.Indicare un esempio di caso peggiore per lalgoritmo di Quicksort. 2.Scrivere un metodo per il calcolo.
SPECIFICA DELLE MAPPE FINITE Gianna Reggio
Esercizi su alberi binari
Programmazione logica
Rappresentazione di numeri relativi (interi con segno)
Classi prime programmazione didattica
Calcolo del Massimo Comun Divisore
File ad accesso casuale o random
COSA VUOL DIRE UN MEZZO? COSA VUOL DIRE UN TERZO?
Metodo della moltiplicazione
Algoritmi e Strutture Dati
Algoritmi e linguaggi di programmazione
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Massimo Comun Divisore
Gerarchie Ricorsive Una gerarchia ricorsiva deriva dalla presenza di una ricorsione o ciclo (un anello nel caso più semplice) nello schema operazionale.
matematico greco del III° secolo a.c.,
Agenti logici: sistemi a regole
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Corso di Programmazione in Java – Esercizio n° 001
Modulo 5 Uso delle Basi di dati Paola Pupilli 2.
FMZ 1 Sistemi basati su conoscenza Costruzione automatica di ontologie di dominio Dott. Fabio Massimo Zanzotto a.a
Array (ordinamento) CORDA – Informatica A. Ferrari.
FONDAMENTI DI INFORMATICA
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Calcolo letterale.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
I Monomi -3.a.b2 -3ab2.
Esecuzione di un Programma [P] Una computazione corrisponde al tentativo di dimostrare, tramite la regola di risoluzione, che una formula (goal) segue.
RETI LOGICHE Daniele Manzaroli
liceo Lioy e liceo Pigafetta, 10 febbraio 2011
Rappresentazione dell'informazione
Capitolo 13 Cammini minimi: Bellman e Ford Algoritmi e Strutture Dati.
Conversione binario-ottale/esadecimale
7/14/20151 Haskell: ADT n ADT: pricipi, proprietà n ADT in Haskell: il meccanismo n ADT in Haskell: Hiding e Qualified n Esempi: Store e i problemi di.
Tempistica-programmazione
Rapporto incrementale Calcolare il rapporto incrementale.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
MASSIMO COMUNE DENOMINATORE (M.C.D)
Algoritmo per il calcolo del maggiore tra tre numeri qualsiasi Francesco PUCILLO matr
Un numero è primo se: è intero e maggiore di 1 è divisibile solo per se stesso e per 1 È un numero primo Infatti: 3 è intero; 3 > 1 3 è divisibile solo.
Luca Chichisola1 Dal problema al programma LUCA CHICHISOLA.
La scrittura decimale Quando un numero è scritto in forma decimale, vi è un numero finito di cifre dopo la virgola. Ma sappiamo che ci sono divisioni “che.
Dal PROBLEMA all’ALGORITMO
DEFINIZIONE. I multipli di un numero sono costituiti dall’insieme dei prodotti ottenuti moltiplicando quel numero per la successione dei numeri naturali.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 22 Marzo 2016.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – Ver. aggiornata al 15 Giugno.
Gennaio 20.. LUNEDÌMARTEDÌMERCOLEDÌGIOVEDÌVENERDÌSABATODOMENICA.
MASSIMO COMUNE DENOMINATORE (M.C.D)
Esercizi.
1 – 70 1 – Aprile – Maggio – Giugno – Luglio 1985
Transcript della presentazione:

ALBERI SLD esercizi

Compito 14 Gennaio 2003 Si consideri il seguente programma Prolog, che calcola il minimo di una lista: min(A,B,A) :- A < B, !. min(A,B,B). minlist([X],X):- !. minlist([H|T],M) :- minlist(T,M1), min(H,M1,M). Si rappresenti l’albero SLD corrispondente all’invocazione ?- minlist([1,2,3],2). Il risultato è corretto? Se no, come dovrebbe essere modificato il programma per avere il comportamento corretto?

Soluzione

Esercizio Si consideri la seguente definizione del predicato length, che calcola la lunghezza di una lista: length([],0). length([_|T],N):- length(T,M), N is M+1. Si mostri l’albero SLD relativo al goal length([1,2,3],X). Si scriva poi il predicato in maniera tail-recursive e si mostri l’albero SLD relativo allo stesso goal.

8 Luglio 2003 Il seguente programma Prolog: sumtree(n(TL,TR),N) :- sumtree(TL,L), sumtree(TR,R), N is L+R. sumtree(X,X). dà errore in backtracking. Si inserisca un cut che permetta di avere un comportamento corretto e si rappresenti l’albero SLD corrispondente alla invocazione :- sumtree(n(1,n(2,3)),N).

Occur check Si consideri il seguente programma Prolog: add([],[]). add([N|R],[N,N|T]). member(J,[J|_]). member(J,[_|K]) :- member(J,K). Si rappresenti l’albero SLD relativo alla query: :- add([A,B],L), member([A,B],L). fino alla prima soluzione nell’ipotesi che venga controllato l’Occur Check. Si mostri poi la risposta calcolata.

Soluzione add([],[]). add([N|R],[N,N|T]). member(J,[J|_]). member(J,[_|K]) :- member(J,K). add([],[]). add([N|R],[N,N|T]). member(J,[J|_]). member(J,[_|K]) :- member(J,K).

22 Giugno 2006 L’algoritmo di Euclide per il calcolo del MCD è dato da: Si consideri il seguente programma Prolog: mcd(A,A,A):-!. mcd(A,B,M):- A<B,!, C is B-A, mcd(A,C,M). mcd(A,B,M):- I is A-B, mcd(I,B,M). L’algoritmo va in loop con il goal ?- mcd(2,2,1). Si corregga il programma e si disegni l’albero SLD relativo all’invocazione ?- member(X,[1,2]), mcd(2,X,1).

Programma corretto mcd(A,A,A):-!. mcd(A,B,M):- A<B,!, C is B-A, mcd(A,C,M). mcd(A,B,M):- A>B, I is A-B, mcd(I,B,M).

Albero SLD mcd(A,A,A):-!. mcd(A,B,M):- A<B,!,C is B-A, mcd(A,C,M). mcd(A,B,M):- A>B, I is A-B, mcd(I,B,M). mcd(A,A,A):-!. mcd(A,B,M):- A<B,!,C is B-A, mcd(A,C,M). mcd(A,B,M):- A>B, I is A-B, mcd(I,B,M).

20 Dicembre 2004 Si consideri il seguente programma Prolog che calcola se un numero è primo (dove mod calcola il modulo, cioè il resto della divisione intera): primo(N):- not(divisibile(N)). divisibile(N):- compreso(2,M,N),0 is N mod M. compreso(I,X,S):- I>=S, !, fail. compreso(I,I,S). compreso(I,X,S):- J is I+1, compreso(J,X,S). Si disegni l’albero SLDNF relativo al goal: ?- primo(3).

primo(N):- not(divisibile(N)). divisibile(N):- compreso(2,M,N), 0 is N mod M. primo(N):- not(divisibile(N)). divisibile(N):- compreso(2,M,N), 0 is N mod M. compreso(I,X,S):-I>=S,!,fail. compreso(I,I,S). compreso(I,X,S):- J is I+1, compreso(J,X,S) compreso(I,X,S):-I>=S,!,fail. compreso(I,I,S). compreso(I,X,S):- J is I+1, compreso(J,X,S)

16 Dicembre 2005 Si consideri il seguente programma Prolog: isground(X):- not(X=skolem). reversible(S=Op):- rewrite(S,Op,R=NewOp), R is NewOp. rewrite(S,A+B,S=A+B):- isground(A), isground(B), !. rewrite(S,A+B,A=S-B):- isground(S), isground(B),!. rewrite(S,A+B,B=S-A):- isground(S), isground(A). Si rappresenti l’albero di derivazione SLD relativo al goal: ?- reversible(6=X+2). e si dica qual è la risposta calcolata.

Standard Backtracking in Prolog (16 Maggio 2002) Si abbia il seguente problema di colorazione di una mappa, con 4 regioni da colorare con 3 colori (individuati dai primi tre numeri naturali, 1, 2 e 3) Il problema sia modellato in Prolog dai seguenti fatti: domain([1,2,3]). %colori disponibili adiac(1,2). %regione 1 e 2 adiacenti adiac(1,3). %regione 1 e 3 adiacenti adiac(2,3). %... adiac(2,4). adiac(3,4). e sia data la seguente nozione di incompatibilità tra coppie di variabili e corrispondenti valori per il problema in esame: noattack(V1,V2,C1,C2):- (adiac(V1,V2); adiac(V2,V1)),!, C1\==C2. noattack(V1,V2,_,_):- not adiac(V1,V2). Si realizzi un programma Prolog che generi la soluzione applicando la tecnica di standard backtracking. In particolare, si realizzi un predicato, invocato come segue: ?-solution([r(1,C1), r(2,C2), r(3,C3), r(4,C4)]) in grado di istanziare i colori (C1, C2,...) per le quattro regioni

Soluzione solution(L):- domain(D), map(L,[],D). map([], Placed, _). map([r(X,Cx)|Xs], Placed, D):- member(Cx, D), noattack_placed(r(X,Cx),Placed), map(Xs,[ r(X,Cx)|Placed],D). noattack_placed(r(X,Cx),[]):-!. noattack_placed(r(X,Cx),[r(Y,Cy)|RestPlaced]):- noattack(X,Y,Cx,Cy).