This is an old revision of the document!
Această etapă își propune exploatarea faptului că funcțiile sunt valori de ordinul întâi. Va trebui să folosiți funcții curry și să abstractizați funcții cu implementări similare. De asemenea, vă încurajăm să valorificați oportunitățile de utilizare a funcțiilor anonime și funcționalelor, deși enunțul nu impune acest lucru.
În această etapă, numărul de case din supermarket nu mai este fixat. Vom avea:
Pentru ca în etapa următoare să putem determina ordinea ieșirii clienților din supermarket, introducem acum un nou câmp în structura counter:
(define-struct counter (index tt et queue))
În această etapă, simulatorul trebuie să modeleze atât situațiile de la etapa anterioară, cât și 2 noi situații:
În primul rând, va trebui să adaptați o serie de funcții de la etapa 1 astfel încât ele să țină cont de noua reprezentare (adică de numărul variabil de case și de prezența câmpului 'et în structura de tip casă).
Exceptând aceste adaptări, funcțiile principale pe care va trebui să le implementați sunt:
(update f counters index)
Exemplu:
(update (λ (C) (struct-copy counter C [tt 0])) (list (counter 1 2 2 '()) (counter 2 5 5 '())) 2)
⇒
(list (counter 1 2 2 '()) (counter 2 0 5 '()))
(remove-first-from-counter C)
Exemplu:
(remove-first-from-counter (counter 1 50 5 '((ana . 3) (leo . 35) (mia . 10))))
⇒
(counter 1 45 35 '((leo . 35) (mia . 10)))
(serve requests fast-counters slow-counters)
Exemplu:
(serve '((ana 8) (mia 2) (mara 14) (ion 7) (remove-first) (ensure 5) (remove-first)) (list (empty-counter 1) (empty-counter 2)) (list (empty-counter 3) (empty-counter 4)))
pentru ITEMS = 5:
C3 = (counter 3 8 8 '((ana . 8)))C1 = (counter 1 2 2 '((mia . 2)))C4 = (counter 4 14 14 '((mara . 14)))C3 = (counter 3 15 8 '((ana . 8) (ion . 7)))C1 = (counter 1 0 0 '()) (observați tt și et)C3 = (counter 3 7 7 '((ion . 7))) (observați tt și et)