• Non ci sono risultati.

Corso di Linguaggi di Programmazione

N/A
N/A
Protected

Academic year: 2022

Condividi "Corso di Linguaggi di Programmazione"

Copied!
15
0
0

Testo completo

(1)

Corso di Linguaggi di Programmazione

Lezione 11

Alberto Ceselli

alberto.ceselli@unimi.it

Universit`a degli Studi di Milano

16 Aprile 2013

(2)

Cut

Predicato per influenzare il comportamento procedurale dei programmi

Effetto: ridurre lo spazio di ricerca delle soluzioni tagliando rami dall’albero di ricerca

green cut: migliorare l’efficienza, o rimuovere comportamenti inattesi, senza influenzare l’esito della computazione

red cut: influenzano l’esito della computazione (se rimuovo il cut, ottengo un programma diverso).

(3)

Cut

Cut `e rappresentato dal simbolo ! Effetto di un cut:

il cut ha successo, ed

indica all’interprete di escludere tutti i rami dell’albero di ricerca non esplorati

a partire dall’unificazione nel goal padre con la testa della clausola in cui `e inserito il cut.

la ricerca (anche nella stessa clausola) prosegue come prima.

(4)

Cut

Esempio: ?- csortedmerge([1,3,5],[2,4],R), con disegno dell’albero di ricerca (alla lavagna).

(5)

Cut

N.B. Il cut ha un effetto “istantaneo” (non ne rimane traccia nello stato dell’interprete). Ad esempio ...

Un cut taglia tutte le clausole “sotto” di esso (nel db delle regole).

Un cut taglia tutte le soluzioni alternative per i goals che appaiono alla sua sinistra nella stessa clausola

Un cut non ha effetto sui goals che appaiono alla sua destra nella stessa clausola.

(6)

Cut e negazione

Prolog assume di trattare con un “mondo chiuso” (closed world assumption)

non `e un sistema true / false, ma un sistema true / fail

not(X) ≡ cannotprove(X).

come implementare not(X)?

not(X) :- X, !, fail.

not(X).

Problemi: negation.pl stesso discorso per “diverso”

(7)

Esempio di utilizzo della negazione:

Predicato alldifferent(Xs): ha successo se Xs `e una lista di tutti elementi diversi.

(8)

Liste

append, delete, reverse

codice, discussione ed esempio di funzionamento dell’interprete su delete e variante select

(9)

Generate-and-test

La programmazione logica `e per natura non-deterministica.

Intuitivamente, una macchina non deterministica `e in grado di scegliere automaticamente e correttamente la computazione successiva tra varie alternative.

Computazioni non-deterministiche sono simulate dall’interprete Prolog attraverso ricerche sequenziali e backtracking.

(10)

Generate-and-test

Esempio: permutation sort

(Oggi pomeriggio in Lab: the “n-queens” problem queens aop.pl)

(11)

Accumulatori e tail recursion

Esempio: fact Esempio: ifact

(12)

Difference-lists

Le difference lists sono strutture dati incomplete Particolarmente utili come accumulatori

difference lists.pl (sort.pl)

(13)

Meta-programmazione Prolog

In Prolog `e possibile modificare la base dati inserendo fatti:

assert(X).

o rimuovendo fatti:

restract(X)

oppure collezionare elementi che soddisfano un certo predicato:

setof(X, p(X), Rs) (senza duplicati) bagof(X, p(X), Rs) (con duplicati)

findall(X, p(X), Rs) (tutte le variabili libere quantificate esistenzialmente)

(14)

Esercizi

Esercizio “Dijkstra’s dutch flag problem” : data una lista di elementi colorati ‘rosso’ ‘bianco’ ‘blu’, riordinare la lista in modo che tutti gli elementi rossi precedano gli elementi bianchi, e tutti gli elementi bianchi precedano gli elementi blu.

Nell’ordinamento deve essere preservato l’ordine parziale degli elementi dello stesso colore nella lista di partenza. Realizzare due versioni del programma: una che utilizzi difference lists, ed una che non le utilizzi.

(15)

Struttura ed efficienza

mapcolor.pl

Riferimenti

Documenti correlati

Classico Brut Cruase Tenuta Mazzolino 29,00€ * Oltrepo Pavese met... Südtiroler Weißweine- Vini bianchi

Se in una posizione i-esima si deve posizionare un elemento pari, partendo dalla posizione successiva (usando l’indice j), si cerca un elemento dispari e si

Non abbiamo quindi modo di modificare le chiavi degli elementi della lista in modo da essere sicuri di riconoscere gli elementi su cui si ` e gi` a passati.. Proviamo dunque

(a) Esibire una relazione su di X, che sia riflessiva, simmetrica, ma non transitiva.. (b) Esibire una relazione su di X, che sia simmetrica, transitiva ma

Esse includono: conoscenza e comprensione di fondamenti di problem solving, di algoritmi e strutture dati, di metodi e tecniche di astrazione; dei paradigmi di programmazione e

Il presente documento, se stampato su supporto cartaceo, riproduce in copia l’originale informatico firmato digitalmente predisposto dal Comune di Jesolo e conservato nei propri

L’introduzione negli anni ’80 di nuovi metodi nella coltivazione della vite, l’ammodernamento della cantina e il coinvolgimento dei figli Marco e Mattia hanno portato

IMPORTANTE: Utilizzare una funzione per creare la lista, un'altra per stamparla e una terza per stampare la sottolista di