ex40 is
vertex(id i32) : property.orderable
is
public fixed redef type.lteq (a, b ex40.vertex) bool => a.id <= b.id
public fixed redef type.equality(a, b ex40.vertex) bool => a.id = b.id
public redef as_string => "v$id"
edge(a, b vertex) is
graph(edges0 Sequence edge) is
neighbors(v vertex) container.Set vertex =>
for
r container.Set vertex := (container.ps_set vertex).new (list vertex).empty, if (v = e.a) r.add e.b
else if (v = e.b) r.add e.a
else r
e in edges0
else
r
v1 := vertex 1
v2 := vertex 2
v3 := vertex 3
v4 := vertex 4
v5 := vertex 5
vertices => [ v1; v2; v3; v4; v5 ]
edges => [ edge v1 v2;
edge v2 v4;
edge v3 v4;
edge v3 v5;
edge v4 v5 ]
g := graph edges
say (g.neighbors v3)