aboutsummaryrefslogtreecommitdiff
path: root/sucl/rule.dcl
blob: f66ca6e73041774d93884573cc9a6042d8ce3099 (plain) (blame)
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
definition module rule

// $Id$

from graph import Graph,Node

// --- Exported types

:: Rule sym var
:: Rgraph sym var

// --- Functions on rules

// Build a rule from its constituents
mkrule :: [.var] .var (Graph .sym .var) -> Rule .sym .var

// The arguments of a rule, i.e. the roots of its lhs
arguments :: !(Rule .sym .var) -> [.var]

// The root of a rule, i.e. of its rhs
ruleroot :: !(Rule .sym .var) -> .var

// The graph part of a rule, i.e. its bindings
rulegraph :: !(Rule .sym .var) -> Graph .sym .var

// --- Functions on rooted graphs

// The empty rooted graph with a given root
emptyrgraph  :: .var -> Rgraph .sym .var

// Update the contents of a variable in a rooted graph
updatergraph :: .var (Node .sym .var) !(Rgraph .sym .var) -> Rgraph .sym .var

// Prune a rooted graph at a variable (making it free)
prunergraph  :: .var !(Rgraph .sym .var) -> Rgraph .sym .var

// Get the root of a rooted graph
rgraphroot   :: !(Rgraph .sym .var) -> .var

// Get the graph part of a rooted graph
rgraphgraph  :: !(Rgraph .sym .var) -> Graph .sym .var

// Build a rooted graph from a root and a graph
mkrgraph     :: .var (Graph .sym .var) -> Rgraph .sym .var