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

Documenti analoghi
3 #3: 20 10:50:05 MET

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

Esercizi su Prolog per Fondamenti di IA 2 Esercitazione

CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3

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

Ambiente di Sviluppo Dev-C++

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

Note per la Lezione 6 Ugo Vaccaro

Funzioni, Stack e Visibilità delle Variabili in C

Ambienti di Programmazione per il Software di Base

Usare il tool emma. info3 angelo unibg

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

Programmazione Procedurale

Laboratorio di Architettura

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

Esercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista

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

Fondamenti di Informatica

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

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

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

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al Sistema Operativo MS-Windows ed all Uso dell IDE DEV-C++

Intelligenza Artificiale I

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

Corso di Linguaggi di Programmazione

Laboratorio di Algoritmi e Strutture Dati

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

Lezione 3: Programmazione della Shell di Unix

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 1 parte (6 CFU)

12 Function Handles e Ricorsione in MATLAB

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Funzioni, Stack e Visibilità delle Variabili in C

Introduzione al Foglio Elettronico

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

Introduzione al Foglio Elettronico

Considerazioni su Tipi di Dati

Laboratorio di programmazione

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

1 Installazione di Mingw e conseguente configurazione di TextPad

Configurazione di una LAN in ambiente Windows

Introduzione a Visual Studio 2005

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

Introduzione. P4 termina prima di P3, P2 e P3 prima di P1 P1 P2 P3 P4 P1 P1 P2 P3 P4. Padre. P1,..., P4 sono processi. Figlio

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

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

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

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

PROGRAMMAZIONE: I sottoprogrammi

Introduzione al Foglio Elettronico

La Programmazione. Cos è la programmazione? Concetti preliminari

Fondamenti di Informatica A.A. 2016/17

Liste concatenate e allocazione dinamica

Introduzione alla compilazione ed esecuzione di programmi C con IDE Dev-C++

REALIZZAZIONE DEL SISTEMA INFORMATIVO DEL SUAPE

COSTRUZIONE DI UN APPLICAZIONE

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

Procedura per allegare e verificare documenti con firma digitale

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al MATLAB c Parte 3 Script e function

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

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

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Processi. Introduzione. Effective user/group id. Fork

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

I Metodi. Fondamenti di Informatica A-K

Laboratorio di Python

VNC con «nlnxrc» Tabella u16.9. Script nlnxrc : controllo di VNC. Si avvia preferibilmente da una

Inserimento in una lista ordinata

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

Guida all'uso del simulatore Calcolatrice Multibase, versione 1.0

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

Laboratorio - Gestione dei File di Sistema con Utility Integrate in Windows 7

DEBUGGING. Ivan Lanese

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

Manuale di Nero DriveSpeed

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

Laboratorio - Gestione dei File di Sistema con Utility Integrate in Windows Vista

COME USARE LA PIATTAFORMA: TUTORIAL STUDENTE

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

Programmazione I - Laboratorio

FUNZIONI che operano su LISTE e TEMI d ESAME

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

1. Introduzione. 2. Installazione di WinEMTFree. 3. Descrizione generale del programma

uguale livello gerarchico non vi sono funzioni più importanti di altre main main

Introduzione al Linguaggio C ed all IDE DEV-C++

Transcript:

Prolog Esercitazione del 6 Giugno 2006 Scopo: 1. Acquisire conoscenza dell ambiente SICStus Prolog 2. Vedere assieme alcuni esercizi di prolog Com è organizzata l esercitazione: 1. Introduzione all ambiente SICStus 2. Qualche esercizio assieme 3. Alcuni esercizi da fare da soli 1 Istruzioni su SICStus 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?- 2

Istruzioni su SICStus 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. 3 Istruzioni su SICStus 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. 4

Es. 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] 5 Es. 1 - 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). 6

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

Es. 3 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 9 Es. 3 - Soluzione consec(el, [El [X _]],X):-!. consec(el, [_ Tail],X):- consec(el,tail,x). 10

Es. 4 tratto dal Compito del 29 marzo 2006 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 11 Es. 4 tratto dal Compito del 29 marzo 2006 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 12

Es. 4 Soluzione vivo([]). vivo([0 L]):-!, vivo(l). vivo([a,b L]):- A < B, vivo(l). 13 Es. vari 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] Data una matrice NxN rappresentata come lista di liste, si calcoli la somma degli elementi della diagonale principale. 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] 14