This shows you the differences between two versions of the page.
|
pp:26:teme:racket-supermarket [2026/03/26 08:44] mihaela.balint |
pp:26:teme:racket-supermarket [2026/03/26 08:55] (current) mihaela.balint |
||
|---|---|---|---|
| Line 53: | Line 53: | ||
| Exemplu pentru ''ITEMS = 5'': | Exemplu pentru ''ITEMS = 5'': | ||
| <code scheme> | <code scheme> | ||
| - | (serve '((ana 7) (mia 2) 5 (ion 8) (dan 6) (close 2) (delay 1 15) (ema 2) (open 2) 1 (geo 5) (close 1) (ensure 7)) | + | (serve '((ana 7) (mia 2) 5 (ion 8) (dan 6) (close 2) (delay 1 15) (ema 2) (open 2) 2 (geo 5) (close 1) (ensure 7)) |
| (list (empty-counter 1)) | (list (empty-counter 1)) | ||
| (list (empty-counter 2) (empty-counter 3))) | (list (empty-counter 2) (empty-counter 3))) | ||
| Line 72: | Line 72: | ||
| * ''ion'' la ''C3'' => ''%%C3 = (counter 3 8 8 (queue {(ion . 8)} '() 1 0))%%'' | * ''ion'' la ''C3'' => ''%%C3 = (counter 3 8 8 (queue {(ion . 8)} '() 1 0))%%'' | ||
| * ''dan'' la ''C2'' => ''%%C2 = (counter 2 8 2 (queue {(ana . 7)} '((dan . 6)) 1 1))%%'' | * ''dan'' la ''C2'' => ''%%C2 = (counter 2 8 2 (queue {(ana . 7)} '((dan . 6)) 1 1))%%'' | ||
| - | * ''C2'' se închide => 'ana' rămâne la 'C2', iar ''dan'' se mută la ''C3'' | + | * ''C2'' se închide => ''ana'' rămâne la ''C2'', iar ''dan'' se mută la ''C3'' |
| * => ''%%C2 = (counter 2 2 2 (queue {(ana . 7)} '() 1 0))%%'' și nu mai primește clienți | * => ''%%C2 = (counter 2 2 2 (queue {(ana . 7)} '() 1 0))%%'' și nu mai primește clienți | ||
| * => ''%%C3 = (counter 3 14 8 (queue {(ion . 8)} '((dan . 6)) 1 1))%%'' | * => ''%%C3 = (counter 3 14 8 (queue {(ion . 8)} '((dan . 6)) 1 1))%%'' | ||
| Line 79: | Line 79: | ||
| * ''C2'' are ''tt'' mai mic, însă ''C2'' este închisă, deci se alege între ''C1'' și ''C3'' | * ''C2'' are ''tt'' mai mic, însă ''C2'' este închisă, deci se alege între ''C1'' și ''C3'' | ||
| * ''C2'' se deschide, fără să producă alte modificări | * ''C2'' se deschide, fără să producă alte modificări | ||
| - | * apoi trece ''1'' minut, după care situația este: | + | * apoi trec ''2'' minute, după care situația este: |
| - | * întârzierea de la ''C1'' s-a consumat parțial => ''%%C1 = (counter 1 14 14 (queue {} '() 0 0))%%'' | + | * întârzierea de la ''C1'' s-a consumat parțial => ''%%C1 = (counter 1 13 13 (queue {} '() 0 0))%%'' |
| - | * la ''C2'' a trecut ''1'' minut => ''%%C2 = (counter 2 1 1 (queue {(ana . 7)} '() 1 0))%%'' | + | * ''ana'' a ieșit de la ''C2'' => ''%%C2 = (counter 2 0 0 (queue {} '() 0 0))%%'' |
| - | * la ''C3'' a trecut ''1'' minut => ''%%C3 = (counter 3 15 7 (queue {(ion . 8) <flux...>} '() 3 0))%%'' | + | * la ''C3'' au trecut ''2'' minute => ''%%C3 = (counter 3 14 6 (queue {(ion . 8) <flux...>} '() 3 0))%%'' |
| - | * ''geo'' se așază la ''C2'' => ''%%C2 = (counter 2 6 1 (queue {(ana . 7)} '((geo . 5)) 1 1))%%'' | + | * ''geo'' se așază la ''C2'' => ''%%C2 = (counter 2 5 5 (queue {(geo . 5)} '() 1 0))%%'' |
| * ''C1'' se închide, fără să producă alte modificări | * ''C1'' se închide, fără să producă alte modificări | ||
| * ''ensure'' compară media timpilor totali ai caselor deschise cu ''7'' | * ''ensure'' compară media timpilor totali ai caselor deschise cu ''7'' | ||
| - | * ''tt2'' + ''tt3'' = ''6'' + ''15'' = ''21'' => ''tt-mediu = 21 / 2 > 7'' | + | * ''tt2'' + ''tt3'' = ''5'' + ''14'' = ''19'' => ''tt-mediu = 19 / 2 > 7'' |
| * ''tt1'' nu participă la medie întrucât ''C1'' este închisă | * ''tt1'' nu participă la medie întrucât ''C1'' este închisă | ||
| - | * se adaugă o casă slow goală (''C4'') => ''tt-mediu = 21 / 3 ≤ 7'' (deci ne oprim aici cu adăugarea) | + | * se adaugă o casă slow goală (''C4'') => ''tt-mediu = 19 / 3 ≤ 7'' (deci ne oprim aici cu adăugarea) |
| + | Rezultat final: | ||
| + | <code scheme> | ||
| + | (list | ||
| + | '((1 . mia) (2 . ana)) | ||
| + | (cons 2 (queue #<stream> '() 1 0)) | ||
| + | (cons 3 (queue #<stream> '() 3 0))) | ||
| + | </code> | ||