yacas mode

x
 
1
// example yacas code
2
Graph(edges_IsList) <-- [
3
    Local(v, e, f, t);
4
5
    vertices := {};
6
7
    ForEach (e, edges) [
8
        If (IsList(e), e := Head(e));
9
        {f, t} := Tail(Listify(e));
10
11
        DestructiveAppend(vertices, f);
12
        DestructiveAppend(vertices, t);
13
    ];
14
15
    Graph(RemoveDuplicates(vertices), edges);
16
];
17
18
10 # IsGraph(Graph(vertices_IsList, edges_IsList)) <-- True;
19
20 # IsGraph(_x) <-- False;
20
21
Edges(Graph(vertices_IsList, edges_IsList)) <-- edges;
22
Vertices(Graph(vertices_IsList, edges_IsList)) <-- vertices;
23
24
AdjacencyList(g_IsGraph) <-- [
25
    Local(l, vertices, edges, e, op, f, t);
26
27
    l := Association'Create();
28
29
    vertices := Vertices(g);
30
    ForEach (v, vertices)
31
        Association'Set(l, v, {});
32
33
    edges := Edges(g);
34
35
    ForEach(e, edges) [
36
        If (IsList(e), e := Head(e));
37
        {op, f, t} := Listify(e);
38
        DestructiveAppend(Association'Get(l, f), t);
39
        If (String(op) = "<->", DestructiveAppend(Association'Get(l, t), f));
40
    ];
41
42
    l;
43
];
44

MIME types defined: text/x-yacas (yacas).