Hoihoi
Ik ben momenteel in Alloy aan het coden, en wil een OV-netwerkje modelleren.
Gaat hardstikke prima, ik heb lijnen en stations (de metro van a'dam modelleer ik).
Dit is mijn code:
Nu valt het op dat in het laatste fact er een en ander misgaat: hij voert "h2 in h1.verbinding1overstap" uit als commando.
Nu is die h1.verbinding1overstap hierna dus leeg.
Dit komt omdat de in operator als set-toevoeging werkt als je een object in set doet, en als vergelijkingsoperator als je set in set doet.
Nu wil ik dus slim van h2 een set maken; hoe kan ik dat het mooiste doen?
(h2+h2-h2) ofzo zal vast kunnen, maar is mi. te goor voor woorden.
Iemand leuk ideetje?
Ik ben momenteel in Alloy aan het coden, en wil een OV-netwerkje modelleren.
Gaat hardstikke prima, ik heb lijnen en stations (de metro van a'dam modelleer ik).
Dit is mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| sig Lijn { halte : set Halte, eindStation : set Halte } sig Halte { lijn : set Lijn, verbinding : set Halte, //directe verbindingen verbinding1overstap : set Halte,//verbindingen met 1 overstap verbinding2overstap : set Halte, //verbindingen met 2 overstappen bereikbaar : set Halte } fact bereikbaar { //eerst de haltes een eigen lijn variabele geven all l : Lijn { all h : Halte | h in l.halte <=> l in h.lijn } //vervolgens gaan we kijken welke haltes bij elkaar in de lijn zitten. Deze zijn dus direct bereikbaar ZONDER overstappen. // Deze hebben dan verbinding all l1 : Lijn { all h1,h2: Halte { h1 in l1.halte && h2 in l1.halte && h1!=h2 => h2 in h1.verbinding } } //verbinding1overstap all h1,h2,h3: Halte { h2 in h1.verbinding && h3 in h2.verbinding && h3 !in h1.verbinding && (h1!= h2 && h1!= h3) => h3 in h1.verbinding1overstap } //in amsterdam is ALLES met ALLES bereikbaar vermits unlimited overstaps (dus geen 'eilandjes') //NOOT: Deze staat uit om de graf zichtbaar te houden //bereikbaar=^(verbinding) } fact bereikbaar2overstap { //verbinding1overstap all h1, h2,h3 : Halte { (h2 in h1.verbinding1overstap ) && (h3 in h2.verbinding) => h3 in h1.verbinding2overstap } } |
Nu valt het op dat in het laatste fact er een en ander misgaat: hij voert "h2 in h1.verbinding1overstap" uit als commando.
Nu is die h1.verbinding1overstap hierna dus leeg.
Dit komt omdat de in operator als set-toevoeging werkt als je een object in set doet, en als vergelijkingsoperator als je set in set doet.
Nu wil ik dus slim van h2 een set maken; hoe kan ik dat het mooiste doen?
(h2+h2-h2) ofzo zal vast kunnen, maar is mi. te goor voor woorden.
Iemand leuk ideetje?