ARITMETICA E RICORSIONE

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "ARITMETICA E RICORSIONE"

Transcript

1 ARITMETICA E RICORSIONE Non esiste, in logica, alcun meccanismo per la valutazione di funzioni, operazione fondamentale in un linguaggio di programmazione I numeri interi possono essere rappresentati come termini Prolog. Il numero intero N è rappresentato dal termine: s(s(s(...s(0)...))) N volte prodotto(x, Y, Z) "Z è il prodotto di X e Y" prodotto(x, 0, 0). prodotto(x,s(y), Z):- prodotto(x, Y, W), somma(x, W, Z). Non utilizzabile in pratica: predicati predefiniti per la valutazione di espressioni 1 PREDICATI PREDEFINITI PER LA VALUTAZIONE DI ESPRESSIONI L insieme degli atomi Prolog contiene tanto i numeri interi quanto i numeri floating point. I principali operatori aritmetici sono simboli funzionali (operatori) predefiniti del linguaggio. In questo modo ogni espressione può essere rappresentata come un termine Prolog. Per gli operatori aritmetici binari il Prolog consente tanto una notazione prefissa (funzionale), quanto la più tradizionale notazione infissa TABELLA OPERATORI ARITMETICI Operatori Unari -, exp, log, ln, sin, cos, tg Operatori Binari +, -, *, \, div, mod +(2,3) e 2+3 sono due rappresentazioni equivalenti. Inoltre, 2+3*5 viene interpretata correttamente come 2+(3*5) 2

2 PREDICATI PREDEFINITI PER LA VALUTAZIONE DI ESPRESSIONI Data un espressione, è necessario un meccanismo per la valutazione Speciale predicato predefinito is. T is Expr ( is(t,expr)) T può essere un atomo numerico o una variabile Expr deve essere un espressione. L espressione Expr viene valutata e il risultato della valutazione viene unificato con T Le variabili in Expr DEVONO ESSERE ISTANZIATE al momento della valutazione 3 ESEMPI :- X is 2+3. yes X=5 :- X1 is 2+3, X2 is exp(x1), X is X1*X2. yes X1=5 X2= X= :- 0 is 3-3. yes : - X is Y-1. Y non è istanziata al momento della valutazione No (NOTA: Alcuni sistemi Prolog danno come errore Instantion Fault) :- X is 2+3, X is 4+5. no 4

3 ESEMPI :- X is 2+3, X is 4+1. yes X=5 In questo caso il secondo goal della congiunzione risulta essere: :- 5 is 4+1. che ha successo. X infatti è stata istanziata dalla valutazione del primo is al valore 5. :- X is 2+3, X is X+1. no NOTA: non corrisponde a un assegnamento dei linguaggi imperativi. Le variabili sono write-once 5 ESEMPI Nel caso dell'operatore is l'ordine dei goal cioè rilevante. (a) :- X is 2+3, Y is X+1. (b) :- Y is X+1, X is 2+3. Mentre il goal (a) ha successo e produce la coppia di istanziazioni X=5, Y=6, il goal (b)fallisce. Il predicato predefinito "is" è un tipico esempio di un predicato predefinito non reversibile; come conseguenza le procedure che fanno uso di tale predicato non sono (in generale) reversibili. 6

4 TERMINI ED ESPRESSIONI Un termine che rappresenta un'espressione viene valutato solo se è il secondo argomento del predicato is p(a,2+3*5). q(x,y) :- p(a,y), X is Y. :- q(x,y). yes X=17 Y=2+3*5 (Y=+(2,*(3,5))) Valutazione di Y NOTA: Y non viene valutato, ma unifica con una struttura che ha + come operatore principale, e come argomenti 2 e una struttura che ha * come operatore principale e argomenti 3 e 5 7 OPERATORI RELAZIONALI Il Prolog fornisce operatori relazionali per confrontare i valori di espressioni. Tali operatori sono utilizzabili come goal all'interno di una clausola Prolog ed hanno notazione infissa OPERATORI RELAZIONALI >, <, >=, =<, ==, =/= disuguaglianza uguaglianza 8

5 CONFRONTO TRA ESPRESSIONI Passi effettuati nella valutazione di: Expr1 REL Expr2 dove REL e un operatore relazionale e Expr1 e Expr2 sono espressioni vengono valutate Expr1 ed Expr2 NOTA: le espressioni devono essere completamente istanziate I risultati della valutazione delle due espressioni vengono confrontati tramite l operatore REL 9 OPERATORI PIU IN DETTAGLIO Le espressioni possono essere rappresentate sia utilizzando la notazione a termini del Prolog, sia in modo più convenzionale In Prolog è possibile definire operatori ed assegnare agli operatori regole di associatività e precedenza Quando ci troviamo ad analizzare un'espressione del tipo 2+3*5 siamo in grado di interpretare univocamente tale stringa come la somma tra 2 ed il prodotto tra 3 e 5 grazie alla convenzione sulla priorità degli operatori che impone che * e piu prioritario del +. 10

6 PRIORITA DEGLI OPERATORI 2+3* * 5 Il concetto di precedenza (priorità) non è sufficiente per rendere non ambigua la lettura di un'espressione ASSOCIATIVITA DEGLI OPERATORI Serve il concetto di associatività: infatti per l espressione ho due possibili interpretazioni (5-2)-2 5-(2-2) Nel caso degli operatori aritmetici +, *, - e / si assume per convenzione che siano associativi a sinistra, ossia si privilegia la prima lettura dell'espressione 12

7 OPERATORI Un operatore e caratterizzato da: nome numero di argomenti (operatori binari e unari) priorità (o precedenza rispetto ad altri operatori) associatività un operatore può essere non associativo: operatore relazionale = associativo a destra associativo a sinistra Date queste proprietà, è sempre possibile trasformare in modo non ambiguo un'espressione con operatori in un albero 13 ESEMPIO Sia data l'espressione aritmetica 2*3+5+4*8*2 (con + con priorità minore di * ed entrambi associativi a sinistra). + Albero di 2*3+5 Albero di 4*8*2 14

8 ESEMPIO Sia data l espressione aritmetica 2*3+5+4*8*2 (con + con priorità minore di * ed entrambi associativi a sinistra). + * + 5 * * ESEMPIO Una volta costruito l'albero corrispondente a una espressione con operatori, il passaggio da tale albero al termine (in notazione funzionale) che rappresenta tale espressione è immediato Il termine corrispondente all'albero dell'esempio precedente è: +(+(*(2,3),5),*(*(4,8),2)) 16

9 PREDICATO OP In Prolog esiste un predicato predefinito per la definizione di operatori. op(priorita, TIPO, NOME) definisce un operatore con nome NOME, priorità PRIORITA e tipo TIPO NOME: atomo alfanumerico con primo carattere alfabetico oppure una lista di tali atomiche vengono definiti con lo stesso tipo e priorità; PRIORITA è un numero (generalmente tra 0 e 1200) e specifica la priorità dell'operatore; TIPO specifica il numero degli argomenti e la regola di associatività dell'operatore 17 PREDICATO OP op(priorita, TIPO, NOME) TIPO specifica il numero degli argomenti e la regola di associatività dell'operatore e puo assumere uno dei seguenti valori fx, fy (per operatori unari prefissi) xf, yf (per operatori unari postfissi) xfx, yfx, xfy (per operatori binari) dove f indica la posizione dell'operatore, x indica un argomento che è o un atomo o un'espressione tra parentesi o un'espressione il cui operatore principale ha priorità strettamente minore di quella dell'operatore che si sta definendo, y indica un argomento che è o un atomo o una espressione tra parentesi o una espressione il cui operatore principale ha priorità minore o uguale di quella dell'operatore che si sta definendo. 18

10 OPERATORI BINARI Nel caso di operatori binari si può stabilire un interessante legame tra il tipo dell'operatore e le regole di associatività; in particolare TIPO=xfx operatore non associativo TIPO=yfx operatore associativo a sinistra per cui, se op ha tipo yfx, l espressione E 1 op E 2 op...op E n viene interpretata come (..( E 1 op E 2 ) op E 3 )...) op E n ) ossia come il termine op(op(...op( E 1,E 2 ), E 3,...), E n ) TIPO=xfy operatore associativo a destra per cui, se op ha tipo xfy, l espressione E 1 op E 2 op...op E n viene interpretata come E 1 op (E 2 op op(e n-1 op E n ) ) ossia come il termine op(e 1,op(E 2,op(..op(E n-1, E n )) 19 ALTRI OPERATORI Anche i connettivi logici, congiunzione ; disgiunzione :- implicazione sono definiti come operatori Prolog. In Prolog non esiste, infatti, alcuna distinzione tra dati e programmi per cui anche le congiunzioni e le clausole sono dei termini. 20

11 OPERATORI PREDEFINITI IN PROLOG :- op(1200, xfx, [ :-, ->]). :- op(1200, fx, [ :-,?-]). :- op(1100, xfy, [ ;]). :- op(1050, xfy, [->]). :- op(1000, xfy, [, ]). :- op( 900, fy, [not, spy, nospy]). :- op( 700, xfx, [=, is, =.., =:=, =\=, <, >, =<, >=]). :- op( 500, yfx, [+, -]). :- op( 500, fx, [+, -]). :- op( 400, yfx, [*, /, //]). :- op( 300, xfx, [mod]). :- op( 200, xfx, [^]). 21 ESEMPIO Consideriamo alcuni esempi di espressioni: 2+3+4*5 +(+(2,3),*(4,5)) 3=4=5 tale espressione non è legale in quanto il tipo dell'operatore = è xfx per cui entrambi gli argomenti devono essere espressioni con priorità strettamente minore di quella di =. In altri termini, l'espressione non è legale in quanto = non è associativo. 3=4+5 =(3, +(4,5)) a,b;c,d,e ;(, (a,b),, (c,, (d,e))) 22

12 ESEMPIO: while..do Introdurre un costrutto di iterazione di tipo while: while C do S con il seguente significato informale "fintanto che la condizione C è vera, invoca la procedura S" Supponiamo che S possa essere una qualunque condizione, anche un ulteriore costrutto di iterazione; si considera quindi come legale una espressione del tipo while C1 do while C2 do S imponendo l'interpretazione while C1 do (while C2 do S) 23 ESEMPIO: while..do Gli operatori while e do possono essere definiti come operatori Prolog. while deve essere definito come un operatore unario prefisso a priorità minore della priorità di do che a sua volta deve essere definito come un operatore binario associativo a destra. Si ha cioè: :- op(200, fx, while). :- op(300, xfy, do). 24

13 ESEMPIO: while..do Si ha allora che una espressione del tipo (while C1) do (while C2) do S viene interpretata secondo la seguente struttura di parentesi (while C1) do ((while C2) do S) ossia come il termine do((while C1), do((while C2),S)) 25 ESEMPIO: while..do Insieme di regole Prolog per tali operatori: while C do S :- C,!, S, while C do S. while C do S. 26

14 ESEMPI Calcolare la funzione abs(x) = x abs(x,y) "Y è il valore assoluto di X" abs(x,x) :- X >= 0. abs(x,y) :- X < 0, Y is -X. Si consideri la definizione delle seguenti relazioni: pari(x) = true se X è un numero pari false se X è un numero dispari dispari(x) = true se X è un numero dispari false se X è un numero pari pari(0). pari(x) :- X > 0, X1 is X-1, dispari(x1). dispari(x) :- X > 0, X1 is X-1, pari(x1). 27 CALCOLO DI FUNZIONI Una funzione può essere realizzata attraverso relazioni Prolog. Data una funzione f ad n argomenti, essa può essere realizzata mediante un predicato ad n+1 argomenti nel modo seguente f:x 1, x 2,..., x n y diventa f(x1,x2,...,xn,y) :- <calcolo di Y> Esempio: calcolare la funzione fattoriale così definita: fatt: n n! (n intero positivo) fatt(0) = 1 fatt(n) = n * fatt(n-1) (per n>0) fatt(0,1). fatt(n,y):- N>0, N1 is N-1, fatt(n1,y1), Y is N*Y1. 28

15 CALCOLO DI FUNZIONI Esempio: calcolare il massimo comun divisore tra due interi positivi mcd: x,y MCD(x,y) (x,y interi positivi) MCD(x,0) = x MCD(x,y) = MCD(y, x mod y) (per y>0) mcd(x,y,z) "Z è il massimo comun divisore di X e Y" mcd(x,0,x). mcd(x,y,z) :- Y>0, X1 is X mod Y, mcd(y,x1,z). 29 TERMINI E LA LORO MANIPOLAZIONE Esistono operatori predefiniti per manipolare i termini Operatori relazionali per il confronto di espressioni aritmetiche tutti gli operatori sono binari e non associativi; gli argomenti di tali operatori sono espressioni che vengono valutate prima del confronto: E 1 =:= E 2 i valori delle due espressioni E 1 ed E 2 sono uguali; Si noti che il goal :- E 1 = E 2 provocherebbe un tentativo di unificare i due termini senza la loro valutazione. 30

16 TERMINI E LA LORO MANIPOLAZIONE Esistono operatori predefiniti per manipolare i termini Operatori relazionali per il confronto di espressioni aritmetiche tutti gli operatori sono binari e non associativi; gli argomenti di tali operatori sono espressioni che vengono valutate prima del confronto: E 1 =/= E 2 i valori delle due espressioni E 1 ed E 2 sono diversi; E 1 > E 2 E 1 >= E 2 E 1 < E 2 E 1 =< E 2 i valori delle due espressioni E 1 ed E 2 sono nella relazione specificata ; 31 UNIFICAZIONE E UGUAGLIANZA TRA TERMINI Due diversi operatori per effettuare la verifica se due termini sono unificabili o uguali. T 1 = T 2 verifica se T 1 e T 2 sono unificabili. Viene generata la sostituzione che unifica i due termini (e vengono pertanto legate le variabili nei due termini). T 1 == T 2 verifica se T 1 e T 2 sono uguali (sintatticamente identici). Se i due termini contengono due variabili in posizioni equivalenti, perché i termini siano uguali, le due variabili devono essere la stessa variabile. Non viene generata alcuna sostituzione. T 1 \== T 2 verifica se T 1 e T 2 non sono uguali (sintatticamente identici). 32

17 UNIFICAZIONE E UGUAGLIANZA TRA TERMINI :- f(x,g(a)) = f(h(c),g(y)). yes X=h(c) Y=a :- 2+3 = 5. no :- f(a,b) == f(a,b). yes :- f(a,x) == f(a,b) no :- f(a,x) == f(a,x). yes :- f(a,x) == f(a,y). no 33 VERIFICA DEL TIPO DI UN TERMINE Esistono operatori per effettuare la verifica del tipo di un termine. Dato un termine T, determinano se T è un atomo, una variabile o una struttura composta. atom(t) "T è un atomo non numerico" number(t) "T è un numero (intero o reale) integer(t) "T è un numero intero" atomic(t) "T è un atomo o un numero (ossia T non è una struttura composta) var(t) "T è una variabile non istanziata" nonvar(t) "T non è una variabile " 34

18 VERIFICA DEL TIPO DI UN TERMINE :- atom(pippo). yes :- atomic(pippo). yes :- number(1). yes :- atomic(1). yes :- atom(1). no :- var(x). yes :- nonvar(p(a,x)). yes :- X=f(Y),nonvar(X). yes 35 ACCESSO ALLE COMPONENTI DI UN TERMINE In Prolog e possibile accedere alle componenti di un termine tramite il predicato functor functor(term, FUNCTOR, ARITY) il termine TERM ha come funtore principale FUNCTOR con numero di argomenti ARITY Esempio: functor(f(3,x), f, 2) 36

19 ACCESSO ALLE COMPONENTI DI UN TERMINE Esistono 4 usi fondamentali di functor(term,functor,arity) se tutti gli argomenti sono istanziati, viene effettuata la verifica che il funtore principale di TERM sia FUNCTOR con ARITY argomenti (ARITY deve essere un numero intero); se solo TERM è istanziato, allora FUNCTOR e ARITY vengono istanziati; vengono cioè estratte le caratteristiche del termine (il suo nome ed il numero dei suoi argomenti). se TERM è una variabile e FUNCTOR e ARITY sono istanziati rispettivamente a un atomo e un numero intero (altrimenti viene segnalato errore a tempo di esecuzione), allora TERM viene istanziata al termine che ha FUNCTOR come funtore principale e ARITY argomenti. se TERM e almeno uno tra ARITY e FUNCTOR sono istanziati, l'argomento variabile viene a sua volta istanziato. 37 ACCESSO ALLE COMPONENTI DI UN TERMINE :- functor(f(a,b,c),f,3). yes :- functor(f(a,b),f,a). yes F=f A=2 :- functor(f(g(x),y,2),f,a). yes F=f A=3 :- functor(t,f,2). yes T = f(_1,_2) :- functor(a,f,a). yes F=a A=0 Si noti che un atomo è definito per uniformità come un termine con zero argomenti. 38

20 ACCESSO ALLE COMPONENTI DI UN TERMINE In Prolog e possibile accedere agli argomenti di un termine tramite il predicato arg arg(pos, TERM, ARG) ARG e l argomento in posizione POS nel termine TERM Il primo argomento di tale predicato deve sempre essere istanziato a una espressione aritmetica al momento della valutazione. 39 ACCESSO ALLE COMPONENTI DI UN TERMINE Esistono 3 usi fondamentali di arg(pos,term,arg) se sia TERM sia ARG sono istanziati al momento della valutazione, viene effettuata la verifica che l'argomento in posizione POS di termine sia unificabile con ARG; se TERM è istanziato a un termine T e ARG è una variabile, allora ARG viene istanziata al termine che è l'argomento in posizione POS in T; se ARG è istanziata, allora l'argomento in posizione POS di TERM viene unificato con ARG; in questo modo è possibile 'inserire' un termine come argomento in una data posizione di TERM. Si noti che se TERM ha un numero di argomenti minore di POS, si ha un fallimento. 40

21 ACCESSO ALLE COMPONENTI DI UN TERMINE :- arg(1,f(a,b),a). yes A=a :- arg(1+2*3,p(a,b,c,d,e,f,g,h,i,j),a). yes A=g :- arg(1,f(g(x),b),a). yes A=g(_1) :- arg(2,p(a,y),b). yes Y=b :- arg(1+1,p(a,g(x)),g(b)). yes X=b :- arg(x,p(a,b),a). Error in arithmetic expression 41 ACCESSO ALLE COMPONENTI DI UN TERMINE In Prolog e possibile trasformare un termine nella lista delle sue componenti tramite il predicato =.. TERMINE =.. [FUNCTOR, ARG1, ARG2,..., ARGn] "Il termine TERMINE ha FUNCTOR come funtore principale e ARG1, ARG2,..., ARGn come argomenti" 42

22 ACCESSO ALLE COMPONENTI DI UN TERMINE Esistono 2 usi fondamentali di TERMINE =.. [FUNCTOR, ARG1, ARG2,..., ARGn] TERMINE è istanziato e il secondo argomento è una variabile; tale variabile viene unificata con la lista che ha il funtore principale di TERMINE come testa e la lista degli argomenti di TERMINE come coda; TERMINE è una variabile e il secondo argomento è una lista (che ha un atomo non numerico come testa, altrimenti la valutazione fallisce) nel qual caso viene costruito il termine che ha come funtore principale la testa della lista e come argomenti gli elementi del resto della lista. 43 ACCESSO ALLE COMPONENTI DI UN TERMINE :- f(a,b) =.. [f,a,b]. yes :- a =.. L yes L=[a] :- f(h(a),b) =.. [FUNCTOR ARGLIST]. yes FUNCTOR=f ARGLIST=[h(a),b] :- T =.. [g,1,x,h(a)]. yes T=g(1,_1,h(a)) :- T =.. [f [1,2,3]]. yes T=f(1,2,3). 44

23 ESEMPIO Dati due termini T 1 e T 2, determinare la loro generalizzazione più specifica (MSG), ossia il termine più specifico di cui sia T 1 sia T 2 sono istanze. T 1 T 2 MSG X X X X Y Z a a a a b X f(x) g(z) Y f(x,a) f(b,y) f(x,y) 45 ESEMPIO msg(t1,t2,t1):- var(t1), var(t2), T1==T2,!. msg(t1,t2,_) :- var(t1),var(t2),!. msg(t1,t2,t1):- var(t1),nonvar(t2),!. msg(t1,t2,t2):- nonvar(t1),var(t2),!. msg(t1,t2,_) :- nonvar(t1), nonvar(t2), functor(t1,f1,n1), functor(t2,f2,n2), (F1 \== F2; N1 =/=N2),!. msg(t1,t2,t3):- nonvar(t1), nonvar(t2), functor(t1,f,n), functor(t2,f,n), T1 =.. [F ARGS1], T2 =.. [F ARGS2], msg_list(args1,args2,args), T3 =.. [F ARGS]. 46

24 ESEMPIO msglist(l1,l2,l) " L è la lista delle generalizzazioni più specifiche delle coppie di elementi delle liste L1 e L2 in ugual posizione" msg_list([],[],[]). msg_list([t1 REST1], [T2 REST2], [T REST]) :- msg((t1,t2,t), msg_list(rest1,rest2,rest). 47 RICORSIONE E ITERAZIONE Il Prolog non fornisce alcun costrutto sintattico per l'iterazione (quali, ad esempio, i costrutti while e repeat) e l'unico meccanismo per ottenere iterazione è la definizione ricorsiva. Una funzione f è definita per ricorsione tail se f è la funzione "più esterna" nella definizione ricorsiva o, in altri termini, se sul risultato della chiamata ricorsiva di f non vengono effettuate ulteriori operazioni La definizione di funzioni (predicati) per ricorsione tail può essere considerata come una definizione per iterazione Potrebbe essere valutata in spazio costante mediante un processo di valutazione iterativo. 48

25 RICORSIONE E ITERAZIONE Si dice ottimizzazione della ricorsione tail valutare una funzione tail ricorsiva f mediante un processo iterativo ossia caricando un solo record di attivazione per f sullo stack di valutazione (esecuzione). In Prolog l'ottimizzazione della ricorsione tail è un po' più complicata che non nel caso dei linguaggi imperativi a causa del: non determinismo della presenza di punti di scelta nella definizione delle clausole. 49 RICORSIONE E ITERAZIONE (a) (b) p(x) :- c1(x), g(x). p(x) :- c2(x), h1(x,y), p(y). p(x) :- c3(x), h2(x,y), p(y). Due possibilità di valutazione ricorsiva del goal :-p(z). se viene scelta la clausola (a), si deve ricordare che (b) è un punto di scelta ancora aperto. Bisogna mantenere alcune informazioni contenute nel record di attivazione di p(z)(i punti di scelta ancora aperti) se viene scelta la clausola (b) (più in generale, l'ultima clausola della procedura), non è più necessario mantenere alcuna informazione contenuta nel record di attivazione di p(z) e la rimozione di tale record di attivazione può essere effettuata 50

26 QUINDI... In Prolog l'ottimizzazione della ricorsione tail è possibile solo se la scelta nella valutazione di un predicato "p" è deterministica o, meglio, se al momento del richiamo ricorsivo (n+1)-esimo di "p" non vi sono alternative aperte per il richiamo al passo n-esimo (ossia alternative che potrebbero essere considerate in fase di backtracking Quasi tutti gli interpreti Prolog effettuano l'ottimizzazione della ricorsione tail ed è pertanto conveniente usare il più possibile ricorsione di tipo tail. 51 RICORSIONE NON TAIL Il predicato fatt è definito con una forma di ricorsione semplice (non tail). Casi in cui una relazione ricorsiva può essere trasformata in una relazione tail ricorsiva fatt1(n,y):- fatt1(n,1,1,y). fatt1(n,m,acc,acc) :- M > N. fatt1(n,m,accin,accout) :- ACCtemp is ACCin*M, M1 is M+1, Accumulatore fatt1(n,m1,acctemp,accout). Accumulatore in ingresso in uscita 52

27 RICORSIONE NON TAIL Il fattoriale viene calcolato utilizzando un argomento di accumulazione, inizializzato a 1, incrementato ad ogni passo e unificato in uscita nel caso base della ricorsione. ACC 0 =1 ACC 1 = 1 * ACC 0 = 1 * 1 ACC 2 = 2 * ACC 1 = 2 * (1*1)... ACC N-1 = (N-1) *ACC N-2 = N-1*(N-2*(...*(2*(1* 1))...)) ACC N = N * ACC N-1 = N*(N-1*(N-2*(...*(2*(1* 1))...))) 53 RICORSIONE NON TAIL Altra struttura iterativa per la realizzazione del fattoriale fatt2(n,y) "Y è il fattoriale di N fatt2(n,y) :- fatt2(n,1,y). fatt2(0,acc,acc). fatt2(m,acc,y) :- ACC1 is M*ACC, M1 is M-1, fatt2(m1,acc1,y). 54

28 RICORSIONE NON TAIL Calcolo del numero di Fibonacci: definizione fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n-1) + fibonacci(n-2) per N >1 Programma Prolog fib(0,0). fib(1,1). fib(n,y) :- N>1, N1 is N-1, fib(n1,y1), N2 is N-2, fib(n2,y2), Y is Y1+Y2. 55

PRIORITA DEGLI OPERATORI OPERATORI PIU IN DETTAGLIO ASSOCIATIVITA DEGLI OPERATORI OPERATORI + * 2+3*5

PRIORITA DEGLI OPERATORI OPERATORI PIU IN DETTAGLIO ASSOCIATIVITA DEGLI OPERATORI OPERATORI + * 2+3*5 OPERATORI PIU IN DETTAGLIO PRIORITA DEGLI OPERATORI Le espressioni possono essere rappresentate sia utilizzando la notazione a termini del Prolog, sia in modo più convenzionale 2+3*5 2 + * In Prolog è

Dettagli

(X (, Y, Y Z ) Z " Z Z

(X (, Y, Y Z ) Z  Z Z ARITMETICA E RICORSIONE Non esiste, in logica, alcun meccanismo per la valutazione di funzioni, operazione fondamentale in un linguaggio di programmazione I numeri interi possono essere rappresentati come

Dettagli

TABELLA OPERATORI ARITMETICI

TABELLA OPERATORI ARITMETICI ARITMETICA E RICORSIONE Non esiste, in logica, alcun meccanismo per la valutazione di funzioni, operazione fondamentale in un linguaggio di programmazione I numeri interi possono essere rappresentati come

Dettagli

TERMINI, OPERATORI e METALIVELLO

TERMINI, OPERATORI e METALIVELLO TERMINI, OPERATORI e METALIVELLO In Prolog tutto è un termine: variabile, costante (numerica o atomica), struttura (lista come caso particolare con funtore. ) Ciascun termine struttura ha un funtore e

Dettagli

Prolog: aritmetica e ricorsione

Prolog: aritmetica e ricorsione Capitolo 13 Prolog: aritmetica e ricorsione Slide: Aritmetica e ricorsione 13.1 Operatori aritmetici In logica non vi è alcun meccanismo per la valutazione di funzioni, che è fondamentale in un linguaggio

Dettagli

TERMINI, OPERATORI e METALIVELLO

TERMINI, OPERATORI e METALIVELLO TERMINI, OPERATORI e METALIVELLO In Prolog tutto è un termine: variabile, costante (numerica o atomica), struttura (lista come caso particolare con funtore. ) Ciascun termine struttura ha un funtore e

Dettagli

OPERATORI In Prolog è possibile definire "operatori" ed assegnare agli operatori regole di associatività e precedenza. Quando ci troviamo ad analizzar

OPERATORI In Prolog è possibile definire operatori ed assegnare agli operatori regole di associatività e precedenza. Quando ci troviamo ad analizzar TERMINI, OPERATORI e METALIVELLO In Prolog tutto è un termine: variabile, costante (numerica o atomica), struttura (lista come caso particolare con funtore. ) Ciascun termine struttura ha un funtore e

Dettagli

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.1 Pseudo codice linguaggio testuale mix di linguaggio naturale ed elementi

Dettagli

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione

Dettagli

Informatica 3. LEZIONE 9: Introduzione ai linguaggi funzionali. Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP

Informatica 3. LEZIONE 9: Introduzione ai linguaggi funzionali. Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP Informatica 3 LEZIONE 9: Introduzione ai linguaggi funzionali Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP Informatica 3 Lezione 9 - Modulo 1 Introduzione ai linguaggi funzionali Linguaggi

Dettagli

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Espressioni Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Valutazione automatica di expr aritmetiche = obiettivo primario dei primi LP

Dettagli

Espressioni ed operatori in C

Espressioni ed operatori in C Espressioni ed operatori in C Espressioni Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali, Paolo Bison, FI08, 2008-09-29 p.1 Linguaggi procedurali classe

Dettagli

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 IL PREDICATO CALL In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile Un primo predicato predefinito che può essere utilizzato

Dettagli

Tipi di dato primitivi

Tipi di dato primitivi Tipi di dato primitivi (oltre int) Tipi di dato primitivi int (già trattati) Valori logici (ricordati) Valori reali Valori carattere Informatica - A.A. 2009/2010 - Tipi di dato 2 1 Valori logici (il caso

Dettagli

Espressioni ed operatori in C

Espressioni ed operatori in C Espressioni ed operatori in C Espressioni Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere

Dettagli

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 IL PREDICATO CALL In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile Un primo predicato predefinito che può essere utilizzato

Dettagli

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double Il cast Cast implicito Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto Per esempio: byte short int long float double int x = 10; float f; f = x; Il valore di

Dettagli

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 IL PREDICATO CALL In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile Un primo predicato predefinito che può essere utilizzato

Dettagli

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi

Dettagli

Risoluzione di un problema

Risoluzione di un problema Algoritmi Risoluzione di un problema Descrizione di un problema! Individuazione di un ALGORITMO! Metodo risolutivo (progetto) Introduzione 2 Algoritmo Sequenza finita di mosse che risolve in un tempo finito

Dettagli

Classificazione dei termini

Classificazione dei termini Classificazione dei termini Il Prolog è un linguaggio a tipizzazione dinamica Predicati predefiniti per riconoscere il tipo di un termine?- var(x). var, nonvar?- var(padre(x)). false.?- X=Y, Y=23, var(x).

Dettagli

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 3 Ricorsione Prerequisiti Programmazione elementare Tecnica top-down Struttura e funzionamento dei sottoprogrammi Pila di attivazione Metodo di Euclide per il calcolo del

Dettagli

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane Operatori in Java Operatori in Java Corso di laurea in Informatica Operatori aritmetici Operatori di uguaglianza e relazionali Operatori logici in espressioni booleane La precedenza degli operatori L associatività

Dettagli

Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. http://www.sics.se/sicstus/ Bob Kowalski: "Algoritmo = Logica + Controllo"

Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. http://www.sics.se/sicstus/ Bob Kowalski: Algoritmo = Logica + Controllo Programmazione Logica Bob Kowalski: "Algoritmo = Logica + Controllo" nella programmazione tradizionale: il programmatore deve occuparsi di entrambi gli aspetti nella programmazione dichiarativa: il programmatore

Dettagli

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

LINGUAGGI DI PROGRAMMAZIONE!

LINGUAGGI DI PROGRAMMAZIONE! LINGUAGGI DI PROGRAMMAZIONE! Il potere espressivo di un linguaggio è! caratterizzato da:! quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente)! quali istruzioni

Dettagli

Università degli Studi di Milano

Università degli Studi di Milano Università degli Studi di Milano Corso di Laurea in Sicurezza dei Sistemi e delle Reti Informatiche Lezione 3 Input/Output elementare. Operatori, espressioni e istruzioni FABIO SCOTTI Laboratorio di programmazione

Dettagli

Valutazione di espressioni

Valutazione di espressioni Valutazione di espressioni Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Blocco Blocco è un insieme di istruzioni consecutive, con un

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli

Dettagli

Espressioni in Linguaggio C

Espressioni in Linguaggio C Concetti chiave Espressioni in Linguaggio C Espressioni Conversioni Implicite Operatori aritmetici Operatore di assegnamento Operatori relazionali Operatori logici Gerarchia e associatività degli operatori

Dettagli

Informatica teorica Lez. n 12 Introduzione al Lisp. Introduzione al Lisp. Prof. Giorgio Ausiello Università di Roma La Sapienza

Informatica teorica Lez. n 12 Introduzione al Lisp. Introduzione al Lisp. Prof. Giorgio Ausiello Università di Roma La Sapienza Introduzione al Lisp Argomenti della lezione Aspetti generali del Lisp S-espressioni Funzioni predefinite Definizione di funzioni e costrutti programmativi Lisp Ispirato da funzioni ricorsive e lambda

Dettagli

CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3

CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3 CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3 MATTEO PRADELLA 1. Introduzione e concetti base La programmazione funzionale è uno stile di programmzione che enfatizza la valutazione di espressioni,

Dettagli

Espressioni con effetti collaterali

Espressioni con effetti collaterali Espressioni con effetti collaterali Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Operatore di assegnamento In C l assegnamento (=)

Dettagli

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere

Dettagli

PROBLEMI E ALGORITMI VESPIA CATERINA LICEO CLASSICO AGLI ANGELI

PROBLEMI E ALGORITMI VESPIA CATERINA LICEO CLASSICO AGLI ANGELI PROBLEMI E ALGORITMI prof.ssa VESPIA CATERINA LICEO CLASSICO AGLI ANGELI C O N T E N U T I Problemi. Concetto di algoritmo. Caratteristiche di un algoritmo. Descrizione di algoritmi - Diagrammi di flusso.

Dettagli

Foglio Elettronico Lezione 1

Foglio Elettronico Lezione 1 - Introduzione - Celle e riferimenti - Formule - Approfondimenti - Funzioni logiche Sommario Introduzione - Foglio elettronico o foglio di calcolo - Cos'è? Strumento per raccogliere dati organizzati in

Dettagli

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

L assegnamento. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time

L assegnamento. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Abbiamo visto È conveniente definire una macchina astratta C Lo stato della macchina ci

Dettagli

IL LINGUAGGIO C TIPI DI DATO

IL LINGUAGGIO C TIPI DI DATO IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace di trattare vari domini di dati, detti tipi primitivi dominio dei

Dettagli

Corso di JavaScript. Prerequisiti. B1 Tipi di dato e operatori. Concetto di variabile, espressione e tipo di dato

Corso di JavaScript. Prerequisiti. B1 Tipi di dato e operatori. Concetto di variabile, espressione e tipo di dato Corso di JavaScript B1 Tipi di dato e operatori 1 Prerequisiti Concetto di variabile, espressione e tipo di dato 2 1 Introduzione In questa Unità illustriamo alcuni strumenti operativi per la scrittura

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine

Dettagli

Considerazioni su Tipi di Dati

Considerazioni su Tipi di Dati Considerazioni su Tipi di Dati April 19, 2017 Definire Tipi di Dato Molti linguaggi permettono di definire sinonimi per tipi di dato esistenti... Non introducono nuovi valori La definizione di un nuovo

Dettagli

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare

Dettagli

Corso di PHP. Prerequisiti. 2.2 Operatori. Conoscenza HTML Tecnica della programmazione Principi di programmazione web. M. Malatesta 2.

Corso di PHP. Prerequisiti. 2.2 Operatori. Conoscenza HTML Tecnica della programmazione Principi di programmazione web. M. Malatesta 2. Corso di PHP 2.2 Operatori 29//25 Prerequisiti Conoscenza HTML Tecnica della programmazione Principi di programmazione web 2 29//25 Introduzione In questa Unità illustriamo più in particolare come le variabili

Dettagli

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne.

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne. Strutture dati PILA e CODA Le strutture dati si dividono in interne e astratte. Quelle astratte sono rappresentazioni dei dati di un problema che rispecchiano le proprietà dei dati e le relazioni usate

Dettagli

Tecniche di prova per induzione

Tecniche di prova per induzione Aniello Murano Tecniche di prova per induzione 3 Lezione n. Parole chiave: Induzione Corso di Laurea: Informatica Codice: Email Docente: murano@ na.infn.it A.A. 2008-2009 Riassunto delle lezioni precedenti

Dettagli

Rappresentazione degli algoritmi

Rappresentazione degli algoritmi Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti

Dettagli

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Algebra di Boole Stefano Cagnoni Algebra di Boole L algebra

Dettagli

LOGICA DEL PRIMO ORDINE: MOTIVAZIONI, SINTASSI E INTERPRETAZIONI. Corso di Logica per la Programmazione A.A Andrea Corradini

LOGICA DEL PRIMO ORDINE: MOTIVAZIONI, SINTASSI E INTERPRETAZIONI. Corso di Logica per la Programmazione A.A Andrea Corradini LOGICA DEL PRIMO ORDINE: MOTIVAZIONI, SINTASSI E INTERPRETAZIONI Corso di Logica per la Programmazione A.A. 2013 Andrea Corradini LIMITI DEL CALCOLO PROPOSIZIONALE Nella formalizzazione di enunciati dichiarativi,

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Facoltà di Ingegneria Clinica BCLR Dispense di Paolo Caressa e Raffaele Nicolussi. Lezione 5. Versione per Python 3. Docenti: Alberto Marchetti Spaccamela Raffaele Nicolussi

Dettagli

Codifica binaria: - valori logici e algebra di Boole -

Codifica binaria: - valori logici e algebra di Boole - Codifica binaria: - valori logici e algebra di Boole - Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin Tipologie di codici Per la rappresentazione di:

Dettagli

Un elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char

Un elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura tt fisica i di ogni elaboratore è intrinsecamente capace di trattare vari domini i di dati, detti tipi i primitivi iti

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli

Dettagli

Strutture di Controllo Condizionali e Operatori Logici e Relazionali

Strutture di Controllo Condizionali e Operatori Logici e Relazionali Linguaggio C Strutture di Controllo Condizionali e Operatori Logici e Relazionali 1 Strutture di Controllo n Controllano il flusso di esecuzione di un programma Istruzioni di selezione: permettono di selezionare

Dettagli

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace di trattare vari domini di dati, detti tipi primitivi dominio dei

Dettagli

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 JavaScript Core Language Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 Condizioni L utilizzo di operatori relazionali e logici consente di formulare delle condizioni

Dettagli

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Descrizione delle operazioni di calcolo. Espressioni costanti semplici Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette

Dettagli

1) Somma dei primi n numeri naturali: 3) Ricerca di un elemento el in una sequenza di interi: FONDAMENTI DI INFORMATICA II Ricorsione 2

1) Somma dei primi n numeri naturali: 3) Ricerca di un elemento el in una sequenza di interi: FONDAMENTI DI INFORMATICA II Ricorsione 2 FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi

Dettagli

Espressioni e Comandi

Espressioni e Comandi Espressioni e Comandi March 24, 2017 Elementi di Base dei Programmi Ricordate? Macchina Astratta: Insieme di algoritmi e strutture dati che permettono di memorizzare ed eseguire programmi Abbiamo parlato

Dettagli

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 META-PREDICATI In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile sum(0,x,x). sum(s(x),y,s(z)):- sum(x,y,z). Operatore (non

Dettagli

Strutture di Controllo Condizionali e Operatori Logici e Relazionali

Strutture di Controllo Condizionali e Operatori Logici e Relazionali Linguaggio C Strutture di Controllo Condizionali e Operatori Logici e Relazionali 1 Strutture di Controllo! Controllano il flusso di esecuzione di un programma Istruzioni di selezione: permettono di selezionare

Dettagli

Operatori di relazione

Operatori di relazione Condizioni Negli algoritmi compaiono passi decisionali che contengono una proposizione (o predicato) dal cui valore di verità dipende la sequenza dinamica Chiamiamo condizioni tali proposizioni Nei casi

Dettagli

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna Pensiero Algoritmico Lezione 3 23 Novembre 2016 Ozalp Babaoglu Università di Bologna Ripasso Definizione del problema Astrarre i dettagli, costruire un modello Costruire l algoritmo che risolve il problema

Dettagli

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Operativamente, risolvere un problema con un approccio ricorsivo comporta ! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa!! La ricorsione consiste nella possibilità di definire una funzione in termini di se

Dettagli

Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza

Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza Il principio di induzione Consideriamo inizialmente solo il principio di induzione per i numeri non-negativi, detti anche numeri naturali. Sia P una proprietà (espressa da una frase o una formula che contiene

Dettagli

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi: FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 19 Ricorsione A. Miola Marzo 2010 http://www.dia.uniroma3.it/~java/fondinf/ Ricorsione 1 Contenuti Funzioni e domini definiti induttivamente

Dettagli

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

Le liste sono una delle strutture dati primitive più diffuse nei linguaggi di programmazione per l'elaborazione simbolica (es( LISTE Le liste so una delle strutture dati primitive più diffuse nei linguaggi di programmazione per l'elaborazione simbolica (es( es: Lisp) In Prolog le liste so dei termini costruiti a partire da u speciale

Dettagli

Flow-chart. Introduzione agli algoritmi e ai diagrammi a blocchi.

Flow-chart. Introduzione agli algoritmi e ai diagrammi a blocchi. Flow-chart Introduzione agli algoritmi e ai diagrammi a blocchi ugo.rinaldi@gmail.com 1 Sommario Fasi dello sviluppo di un programma Algoritmo Dati: Variabili e Costanti Le operazioni tipiche Diagramma

Dettagli

Fogli Elettronici. Idoneità Informatica Prof. Mauro Gaspari

Fogli Elettronici. Idoneità Informatica Prof. Mauro Gaspari Fogli Elettronici Idoneità Informatica Prof. Mauro Gaspari Cosa è un foglio elettronico. Strumento per raccogliere dati organizzati in tabelle e farci delle operazioni: Le celle contengono numeri o altri

Dettagli

Cosa si intende con stato

Cosa si intende con stato Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando

Dettagli

Scheme: struttura del programma e campo di azione

Scheme: struttura del programma e campo di azione «a2» 2013.11.11 --- Copyright Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net Scheme: struttura del programma e campo di azione Definizione e campo di azione...........................

Dettagli

Informatica (A-K) 5. Algoritmi e pseudocodifica

Informatica (A-K) 5. Algoritmi e pseudocodifica Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

Laboratorio di Programmazione M-Z

Laboratorio di Programmazione M-Z Laboratorio di Programmazione M-Z Docente: Dott. Francesco Strappaveccia france.strappavecci2@unibo.it Università di Bologna, Sede di Cesena Espressioni algebriche Uno dei compiti del compilatore è quello

Dettagli

Le variabili logiche possono essere combinate per mezzo di operatori detti connettivi logici. I principali sono:

Le variabili logiche possono essere combinate per mezzo di operatori detti connettivi logici. I principali sono: Variabili logiche Una variabile logica (o booleana) è una variable che può assumere solo uno di due valori: Connettivi logici True (vero identificato con 1) False (falso identificato con 0) Le variabili

Dettagli

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Introduzione Istruzioni

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile

Dettagli

LINGUAGGI E TRADUTTORI - 20 giugno Prof. S. Crespi Reghizzi. Automi e espressioni regolari (40%)

LINGUAGGI E TRADUTTORI - 20 giugno Prof. S. Crespi Reghizzi. Automi e espressioni regolari (40%) LINGUAGGI E TRADUTTORI - 20 giugno 2001 - Prof. S. Crespi Reghizzi COGNOME e NOME... MATRICOLA... Tempo a disposizione: 90 minuti. Libri e appunti personali possono essere impiegati. Parte I Punti 30-esimi

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 3 Analisi dettagliata di un programma /* commento */ Possono estendersi su più linee apparire in qualsiasi parte del programma. Alternativamente

Dettagli

Introduzione alla logica matematica

Introduzione alla logica matematica Introduzione alla logica matematica, Paolo Bison, A.A. 2004-05, 2004-10-26 p.1/29 Introduzione alla logica matematica Silvana Badaloni Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di

Dettagli

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi, Traduttori e le Basi della Programmazione Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi

Dettagli

Algebra di Boole. Andrea Passerini Informatica. Algebra di Boole

Algebra di Boole. Andrea Passerini Informatica. Algebra di Boole Andrea Passerini passerini@disi.unitn.it Informatica Variabili logiche Una variabile logica (o booleana) è una variable che può assumere solo uno di due valori: True (vero identificato con 1) False (falso

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,

Dettagli

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero. ANALISI SINTATTICA Data un linguaggio scrivere una grammatica che lo generi ESERCIZIO 1 Definire una grammatica per il linguaggio L = {ww w appartiene a (a, b)*} ESERCIZIO 2 Dato l alfabeto T=[0,1,2,3,4,5,6,7,8,9,/}

Dettagli

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a Dott.ssa Maria Carmela De Bonis a.a. 2013-14 Programmi Un elaboratore riceve dei dati in ingresso, li elabora secondo una sequenza predefinita di operazioni e infine restituisce il risultato sotto forma

Dettagli

Costrutti di iterazione

Costrutti di iterazione Costrutti di iterazione Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Iterazione Data un espressione logica e un blocco di attività

Dettagli

Sistemi di dimostrazione

Sistemi di dimostrazione Sistemi di dimostrazione Un sistema di deduzione (o dimostrazione) consiste di un insieme di assiomi (a volte vuoto) un insieme di regole di inferenza Una deduzione (o derivazione) di una formula A da

Dettagli