aboutsummaryrefslogtreecommitdiff
path: root/sucl
diff options
context:
space:
mode:
Diffstat (limited to 'sucl')
-rw-r--r--sucl/pfun.dcl3
-rw-r--r--sucl/pfun.icl5
2 files changed, 8 insertions, 0 deletions
diff --git a/sucl/pfun.dcl b/sucl/pfun.dcl
index 49db62d..baea62f 100644
--- a/sucl/pfun.dcl
+++ b/sucl/pfun.dcl
@@ -28,6 +28,9 @@ postcomp :: (.ran1 -> .ran2) !(Pfun .dom .ran1) -> Pfun .dom .ran2
// Build a total function from a partial one by supplying a default value
total :: .ran !(Pfun dom .ran) dom -> .ran | == dom
+// Apply partial function with a default value
+foldpfun :: (.ran1 -> .ran2) .ran2 !(Pfun dom .ran1) dom -> .ran2 | == dom
+
// Domain restriction of a partial function
domres :: !.[dom] .(Pfun dom ran) -> Pfun dom ran | == dom
diff --git a/sucl/pfun.icl b/sucl/pfun.icl
index 14df397..c303b7d 100644
--- a/sucl/pfun.icl
+++ b/sucl/pfun.icl
@@ -54,6 +54,11 @@ total def (Restrict x p) arg
| arg==x = def
= total def p arg
+// Apply partial function with a default value
+foldpfun :: (.ran1 -> .ran2) .ran2 !(Pfun dom .ran1) dom -> .ran2 | == dom
+foldpfun found notfound pfun arg
+ = total notfound (postcomp found pfun) arg
+
domres :: !.[dom] .(Pfun dom ran) -> Pfun dom ran | == dom
domres domain oldpfun
= foldr adddom emptypfun domain