aboutsummaryrefslogtreecommitdiff
path: root/sucl/strat.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'sucl/strat.dcl')
-rw-r--r--sucl/strat.dcl183
1 files changed, 0 insertions, 183 deletions
diff --git a/sucl/strat.dcl b/sucl/strat.dcl
deleted file mode 100644
index c2b6ce6..0000000
--- a/sucl/strat.dcl
+++ /dev/null
@@ -1,183 +0,0 @@
-definition module strat
-
-// $Id$
-
-from spine import Answer
-from history import History
-from rule import Rule
-from graph import Graph,Node
-from StdOverloaded import ==
-from StdClass import Eq
-from cleanversion import String
-
-from history import HistoryAssociation,HistoryPattern,Link // for History
-from spine import Spine // for Answer
-from spine import Subspine // for Spine
-from rule import Rgraph // for History
-from basic import Optional // for Spine
-
-:: Strategy sym var pvar result
- :== (Substrategy sym var pvar result)
- (Graph sym var)
- ((Subspine sym var pvar) -> result)
- result
- (Node sym var)
- -> result
-
-:: Substrategy sym var pvar result
- :== ((Spine sym var pvar) -> result)
- result
- var
- -> result
-
-:: Law sym var pvar result
- :== (Substrategy sym var pvar result)
- (Graph sym var)
- ((Subspine sym var pvar) -> result)
- result
- [var]
- result
- -> result
-
-// Apply a strategy recursively to a graph
-// by deriving the substrategy from it and feeding it back to it
-// Think Y operator
-makernfstrategy
- :: .(History sym var) // History of previous rooted graphs attached to nodes
- (Strategy sym var pvar (Answer sym var pvar)) // Strategy for a defined node
- .[var] // List of nodes known in RNF (closed pattern nodes of subject rule+strict args)
- var // Root of replacement
- (Graph sym var) // Subject graph
- -> Answer sym var pvar
- | Eq sym
- & Eq var
- & Eq pvar
-
-
-/* ------------------------------------------------------------------------
-STRATEGY TRANSFORMERS
-The funcions below tranform (simpler) strategies into more complicated ones
------------------------------------------------------------------------- */
-
-// A strategy transformer that checks for partial applications
-checkarity
- :: !(sym -> Int) // Arity of function symbol
- (Strategy sym var pvar .result) // Default strategy
- (Substrategy sym var pvar .result) // Substrategy
- (Graph sym var) // Subject graph
- ((Subspine sym var pvar) -> .result) // Spine continuation
- .result // RNF continuation
- !.(Node sym var) // Subject node
- -> .result
-
-// A strategy transformer that checks for constructor applications
-checkconstr
- :: (sym->String)
- (sym->.Bool)
- (Strategy sym var pvar .result)
- (Substrategy sym var pvar .result)
- (Graph sym var)
- ((Subspine sym var pvar) -> .result)
- .result
- .(Node sym var)
- -> .result
-
-// A strategy transformer that checks for primitive symbol applications
-checkimport
- :: !(sym->.Bool)
- (Strategy sym var pvar .result)
- (Substrategy sym var pvar .result)
- (Graph sym var)
- ((Subspine sym var pvar) -> .result)
- .result
- .(Node sym var)
- -> .result
-
-// A strategy transformer that checks (hard coded) laws
-checklaws
- :: [(sym,Law sym var pvar result)]
- (Strategy sym var pvar result)
- (Substrategy sym var pvar result)
- (Graph sym var)
- ((Subspine sym var pvar) -> result)
- result
- (Node sym var)
- -> result
- | == sym
-
-// A strategy transformere that checks a list of rewrite rules
-// This is the real thing that characterises the functional strategy
-checkrules
- :: ((Graph sym pvar) pvar var -> .Bool)
- (sym -> .[Rule sym pvar])
- (Strategy sym var pvar result)
- (Substrategy sym var pvar result)
- (Graph sym var)
- ((Subspine sym var pvar) -> result)
- result
- (Node sym var)
- -> result
- | == sym
- & == var
- & == pvar
-
-// A strategy transformer that checks a function application
-// for strict arguments
-checkstricts
- :: !(sym -> [.Bool]) // Strict arguments of function
- (Strategy sym var pvar .result) // Default strategy
- (Substrategy sym var pvar .result) // Substrategy
- (Graph sym var) // Subject graph
- ((Subspine sym var pvar) -> .result) // Spine continuation
- .result // RNF continuation
- !.(Node sym var) // Subject node
- -> .result
-
-/* ------------------------------------------------------------------------
-USEFUL AIDS FOR DEFINING STRATEGY TRANSFORMERS
-The functions below are useful for inspecting a graph
-such as done by a strategy transformer.
------------------------------------------------------------------------- */
-
-// Force evaluation of stricts arguments of a node in the graph
-forcenodes
- :: (Substrategy sym var pvar .result)
- ((Subspine sym var pvar) -> .result)
- .result
- !.[var]
- -> .result
-
-// Try to apply a transformation rule (that doesn't need evaluated arguments)
-rulelaw
- :: (Rule sym pvar)
- -> Law sym var pvar result
- | == sym
- & == var
- & == pvar
-
-// Try to apply a law
-trylaw
- :: (Graph sym var)
- (.(Subspine sym var pvar) -> result)
- .[var]
- (Rule sym pvar)
- result
- -> result
- | == sym
- & == var
- & == pvar
-
-// Try a list of rewrite rules
-// Requires argument evaluation for closed patterns
-tryrules
- :: ((Graph sym pvar) pvar var -> .Bool)
- (Substrategy sym var pvar result)
- (Graph sym var)
- ((Subspine sym var pvar) -> result)
- .[var]
- -> result
- .[Rule sym pvar]
- -> result
- | == sym
- & == var
- & == pvar