3 #3: 20 10:50:05 MET

Documenti analoghi
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

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

Corso di Intelligenza Artificiale. Esercizio 1

Corso di Intelligenza Artificiale

Esame Laboratorio di Programmazione

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

Esercizi su Prolog per Fondamenti di IA 2 Esercitazione

Note per la Lezione 6 Ugo Vaccaro

Laboratorio di Algoritmi e Strutture Dati

12 Function Handles e Ricorsione in MATLAB

Ambienti di Programmazione per il Software di Base

CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3

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

Funzioni, Stack e Visibilità delle Variabili in C

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Ambiente di Sviluppo Dev-C++

Laboratorio di Python

Usare il tool emma. info3 angelo unibg

1 Installazione di Mingw e conseguente configurazione di TextPad

La Programmazione. Cos è la programmazione? Concetti preliminari

Fondamenti di Informatica

Università degli Studi di Brescia ELEMENTI DI INFORMATICA E PROGRAMMAZIONE Ingegneria GESTIONALE PROF. M.SECHI PARTE B

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

Linguaggi di Programmazione

perror: individuare l errore quando una system call restituisce -1

Corso di Linguaggi di Programmazione

Lezione 3: Programmazione della Shell di Unix

Laboratorio di Architettura

Lab. di Sistemi Operativi - Esercitazione n 1 - a.a. 2016/2017. Comandi Shell

Programmazione Procedurale

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 1 parte (6 CFU)

Considerazioni su Tipi di Dati

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

Laboratorio di programmazione

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

Configurazione di una LAN in ambiente Windows

Laboratorio di Informatica

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

FILE NUMERO 4 POMPE DI CALORE WEB THERMONET

Intelligenza Artificiale I

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

PROGRAMMAZIONE: I sottoprogrammi

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

6) Descrivere con un diagramma a blocchi un algoritmo che legga da input due numeri ne calcoli il prodotto in termini di somme ripetute.

Documentazione aggiornata al 05/04/2017 SOMMARIO

Procedura per allegare e verificare documenti con firma digitale

Esempi di programmazione in C

Introduzione al MATLAB c Parte 3 Script e function

5. DIVIDE AND CONQUER I

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 8 Settembre 2016 Tempo a disposizione: 2 h Risultato: 32/32 punti

Funzioni, Stack e Visibilità delle Variabili in C

Laboratorio di Python

Laboratorio di Python

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

ESERCIZI SULLE MATRICI

Inserimento in una lista ordinata

LA RICORSIONE LA RICORSIONE

AXWIN6 QUICK INSTALL v.3.3

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Metodi numerici con elementi di Programmazione A.A

MatLab - Testo pagina 1 di 5 101

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

ISTRUZIONI ACCESSO E FUNZIONAMENTO TRELLO

Manuale del programma PROGPAR. Per comandare la scheda relè connessa alla porta pa... Page 1 of 5

Introduzione a Visual Studio 2005

Da XTOTEM pro a XTOTEM freestyle

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

Titolo presentazione

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

- comando sort: con chiavi di ordinamento -

Informatica B

Esempio: il fattoriale di un numero fact(n) = n! n!: Z! N n! vale 1 se n " 0 n! vale n*(n-1)! se n > 0. Codifica:

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Facoltà di Ingegneria Industriale. Matlab/Octave - Esercitazione 7. ricorsione e funzioni anonime

Direzione Servizi per la Ricerca - Ufficio Consulenza Contabile e Gestionale dei Progetti di Ricerca

COSTRUZIONE DI UN APPLICAZIONE

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 24 Gennaio 2011 COGNOME E NOME RIGA COLONNA MATRICOLA

Inizializzare oggetti

Introduzione al Foglio Elettronico

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Processi. Introduzione. Effective user/group id. Fork

COMPITO DI FONDAMENTI DI INTELLIGENZA ARTIFICIALE INTELLIGENZA ARTIFICIALE (v.o.) PARTE I

A.A. 2018/2019. Esercitazione 3 [Per Casa] Strutturazione del Codice Sorgente per la Risoluzione di Problemi mediante MATLAB

1 Esercizi di Matlab. L operatore : permette di estrarre sottomatrici da una matrice assegnata. Vediamo alcuni esempi.

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

FILE NUMERO 2 ALLEGATO G WEB THERMONET

Lab. di Sistemi Operativi - Lezione in aula - a.a. 2012/2013

Laboratorio di INFORMATICA. 15 ottobre 2009

Transcript:

Avvio di SICStus Prolog Il sistema viene avviato, al prompt della shell, dal comando sicstus, o alternativamente, dal menù Avvio di Windows. All'avvio il sistema si identifica e presenta il proprio prompt, con un output del tipo: SICStus 3 #3: Fri Dec 20 10:50:05 MET 1996?- Caricamento di programmi I programmi Prolog possono essere caricati nel sistema mediante il comando consult :?- consult(parenti). {consulting /export/users/michela/parenti.pl...} {/export/users/michela/parenti.pl consulted, 9 msec 12000 bytes} yes?-

Caricamento di programmi In alternativa si può usare l equivalente comando nel menù File E possibile specificare un file Prolog al momento dell'avvio del sistema: c:\> sicstus -l parenti (si noti che non e necessario specificare l estensione del file: SICStus cerca automaticamente file con estensione.pl ) Tracing Il comando trace consente di seguire passo passo la risoluzione delle clausole; tale modalità può poi essere disabilitata con il comando notrace. Dichiarazioni dinamiche Qualora si vogliano utilizzare i predicati assert e retract occorre porre l'attenzione su una particolarità del sistema SICStus: per ottimizzare le prestazioni il sistema compila i programmi (o meglio le basi di conoscenza) che vengono caricate. È quindi evidente il problema che si pone nel tentare di modificare a run-time un insieme di regole e fatti già compilati. Affinchè sia possibile aggiungere o togliere clausole (o fatti) ad una relazione è necessario dichiarare che tale relazione è da ritenersi dinamica, cioè non definita staticamente a priori. Ad esempio, la seguente dichiarazione previene la compilazione delle clausole relative alle relazioni member/2 e empty/1: :- dynamic user: member/2,user : empty/1. Tale dichiarazione va inserita all'inizio del programma Prolog in cui si definiscono le relazioni in oggetto.

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] 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).

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]]

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

Un giorno il mago rosso venne sfidato dal mago verde ad un duello di veleni. Ciascuno dei due doveva portare il veleno più potente che era riuscito a produrre; ciascuno avrebbe bevuto prima il veleno dell altro e poi il proprio. Vale infatti la regola che se si beve un veleno e poi uno più potente, allora non si muore, ma il secondo fa da antidoto per il primo. Il mago rosso accettò la sfida, sapendo che il mago verde aveva un veleno molto più potente del suo: quello del mago verde ha potenza 8, mentre il mago rosso ha solo dell acqua (che non è un veleno e ha potenza 0) ed un veleno a potenza 1. Il mago rosso, però ha pensato di bere qualcosa prima della sfida

Si scriva un predicato Prolog vivo/1 che prende in ingresso una lista di numeri ed ha successo se bevendo quella sequenza di veleni si sopravvive. Es:?- vivo([1,8,0,1,4]). yes?- vivo([1,2,4,1]). no vivo([]). vivo([0 L]):-!, vivo(l). vivo([a,b L]):- A < B, vivo(l).

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] Suggerimento: cercare di riformulare il problema in maniera dichiarativa. Nella formulazione, assumere che l appiattimento di un elemento è una lista contenente quell elemento Data una matrice NxN rappresentata come lista di liste, si calcoli la somma degli elementi della diagonale principale. Provare a ragionare in termini di sottomatrici 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]