cui-unige / outils-formels-modelisation

Cours de Bachelor : Outils Formels de Modélisation
20 stars 44 forks source link

Valeurs dans les états #8

Closed CelineRenaud closed 7 years ago

CelineRenaud commented 7 years ago

Comment peut-on récupérer afficher le nombre de jetton après chaque état...

J'avais dans l'dée de faire : print("\(taskPool) et \(processPool)") Mais ça affiche le nom et non la valeur. Comment récupérer la valeur après chaque exécution de transitions ?

kyouko-taiga commented 7 years ago

taskPool et processPool sont des places. Ce sont des informations structurelles, et c'est pour cela qu'elles ne sont pas associées à un nombre de jeton. C'est là le rôle d'un marquage.

Lorsque l'on fait let m = someTransition.fire(from: ...)!, on obtient le marquage après tir de la transition someTransition. m est une instance de PTMarking, c'est-à-dire un marquage. Tu peux soit print le marquage directement, pour obtenir le nombre de jetons dans chaque place, ou alors sélectionner au préalable une place en particulier en utilisant un subscript (i.e. m[place]).

N'oublie pas que et Transition.fire(from:) et PTMarking.subscript(:) retournent des valeurs optionnelles. Il te faudra donc les unwrap, faute de quoi Swift refusera de compiler ton programme ou au mieux émettra un warning à l'appel de print.

let p0 = ...
let p1 = ...
let t0 = ...

let m0 = t0.fire(from: [p0: 1, p1: 2])
print(type(of: m0))
// "PTMarking?"

// Unwrapping with a `if let ...` test
if let m1 = t0.fire(from: [p0: 1, p1: 2]) {
  // Forced-unwrapping with `!`
  print(m1[p0]!)
}