Domanda di teoria Mereghetti Clicca QUI per vedere il messaggio nel forum |
caha |
Ciao,
ho una domanda per quanto riguarda la teoria di mereghetti.
Secondo il libro di testo consigliato dal prof e secondo le lezioni fatte in aula esiste una regola chiamata: "lazy evaluation".
esempio:
abbiamo due espr e volgiamo valutare:
1)
<espr 1> && <espr 2>,
<espr 1> || <espr 2>,
se <espr 1> viene valutato false, l'<espr 2> non viene valutato, cioè non si considera neanche. Quindo le variabili non vengono incr/decr.
Altrimenti se <espr 1> è true, l' <espr 2> viene valutato.
Questo vale sia per && che per ||.
2) <espr 1> & <espr 2>,
<espr 1> | <espr 2>,
in questi casi non vale questa regola, sia <espr 2> che <espr 2> vengono valutate indipendentemente che siano true o false.Quindi le variabili vengono incr/decr, a secondo dell'esercizio.
Domanda:come mai negli esercizi svolti sul sito,- a volte vengono rispettate queste regole e a volte no?
Questo lo devo considerare un errore fatto a caso oppure esiste un altra regola che fa alcuni eccezioni?
plaese risp
grazie |
matt |
Dovresti postare l'esempio dove pensi non venga rispettata la lazy evaluation... è possibile che si tratti di un refuso comunque |
caha |
esempio comitino a.a 08/09
in questo caso dove x=2 e y=3 x y
((x=y) > y + 1) || (x++ == --y) false 4 2
non viene rispettato, cioè i variabili x,y sono incr e decr
Invece qui si che vienne rispettato:
(x++ == y++) && !((x = y) == x%2) |
Stetolo |
Originally posted by caha
[B]esempio comitino a.a 08/09
in questo caso dove x=2 e y=3 x y
((x=y) > y + 1) || (x++ == --y) false 4 2
non viene rispettato, cioè i variabili x,y sono incr e decr
La parte a sinistra dell' || è falsa (3 > 3+1), quindi la valutazione dell'espressione prosegue alla seconda parte. Nel caso dell'OR la lazy evaluation "avviene" solo nel caso il primo pezzo valutato sia vero, altrimenti si prosegue nella parte restante, nel caso ci sia qualche espressione vera (è sufficiente una sola espressione vera a rendere vero l'intero OR). |
Paul442 |
quindi se è false si prosegue mentre se è true non si prosegue? ho capito bene? |
Stetolo |
Originally posted by Paul442
quindi se è false si prosegue mentre se è true non si prosegue? ho capito bene?
Esatto, nel caso di OR è così.
Nel caso di AND invece è il contrario.
Questo comportamento si spiega col fatto che un'espressione in cui compare l'OR ha bisogno che almeno una delle parti sia vera per risultare nel complesso vera, quindi appena se ne incontra un "pezzo" vero, il programma smette di valutare le seguenti perchè sarebbe inutile, risulterebbe comunque vera; perchè sia falsa, invece, è necessario che TUTTE le parti che compongono l'espressione siano false, perciò non si può attuare la lazy evaluation, finchè non sono tutte verificate.
Le espressioni con AND sono vere solo se tutte le espressioni che le compongono sono vere, perciò nel caso se ne incontri un "pezzo" falso è inutile proseguire la valutazione, perchè risulterebbe comunque falsa nel complesso: quindi la lazy evaluation si attua solo nel caso in cui si trovano espressioni false, altrimenti finchè sono vere, si deve proseguire la valutazione per determinare l'eventuale verità complessiva dell'AND (che si ha solo se TUTTE sono vere).
In altre parole la lazy evaluation è una scorciatoia che si può imboccare solo nel momento in cui il programma sa per certo quale sarà l'esito della valutazione. |
Paul442 |
Grazie mille...gentilissimo..senti invece gli esercizi sui diagrammi UML tu li hai capiti per caso? io quello dell'ultimo compito non l'ho mica capito onestamente... |
Stetolo |
Quando ho seguito io non facevamo esercizi sull'UML, sorry! |
Mr.O |
volevo chiedervi se sapete qualche libro/sito dove ci sono degli esercizi (per la creazione di classi) giudati o almeno che ci sia la soluzione per avere un riscontro finale...
grazie |
|
|
|