aboutsummaryrefslogtreecommitdiff
path: root/sucl/complete.icl
diff options
context:
space:
mode:
Diffstat (limited to 'sucl/complete.icl')
-rw-r--r--sucl/complete.icl16
1 files changed, 9 insertions, 7 deletions
diff --git a/sucl/complete.icl b/sucl/complete.icl
index 25e56c8..136db40 100644
--- a/sucl/complete.icl
+++ b/sucl/complete.icl
@@ -3,6 +3,7 @@ implementation module complete
// $Id$
import graph
+import basic
import StdEnv
/*
@@ -78,10 +79,11 @@ coveredby complete subject pvarss [svar:svars]
| complete (map fst3 closeds)
= and (map covered closeds)
= coveredby complete subject opens svars
- where (opens,closeds) = split pvarss
- covered (sym,repvar`,pvarss`) = coveredby complete subject pvarss` (repvar (repvar` undef) svar++svars)
+ where (opens,closeds) = psplit pvarss
+ covered (sym,repvar`,pvarss`) = coveredby complete subject pvarss` (repvar (repvar` dummyvar) svar++svars)
(sdef,(ssym,sargs)) = varcontents subject svar
tmpvalue = (fst (foldr (spl (repvar sargs) ssym) ([],[]) pvarss))
+ dummyvar = abort "complete: error: accessing dummy variable"
repvar pvars svar = map (const svar) pvars
@@ -94,7 +96,7 @@ multipatterns with an open pattern are expanded and added as well.
*/
-split
+psplit
:: [Pattern sym var]
-> ( [Pattern sym var]
, [ ( sym
@@ -106,14 +108,14 @@ split
| == sym
& == var
-split [] = ([],[])
-split [(subject,[svar:svars]):svarss]
+psplit [] = ([],[])
+psplit [(subject,[svar:svars]):svarss]
| not sdef
= ([(subject,svars):opens`],map add closeds`)
= (opens,[(ssym,repvar,[(subject,sargs++svars):ins]):closeds])
- where (opens`,closeds`) = split svarss
+ where (opens`,closeds`) = psplit svarss
add (sym,repvar,svarss`) = (sym,repvar,[(subject,repvar svar++svars):svarss`])
- (opens,closeds) = split outs
+ (opens,closeds) = psplit outs
(ins,outs) = foldr (spl repvar ssym) ([],[]) svarss
repvar svar = map (const svar) sargs
(sdef,(ssym,sargs)) = varcontents subject svar