ITS Muddle.
[pdp10-muddle.git] / MUDDLE / mapper.9
diff --git a/MUDDLE/mapper.9 b/MUDDLE/mapper.9
new file mode 100644 (file)
index 0000000..153fb0f
--- /dev/null
@@ -0,0 +1,80 @@
+
+<DEFINE ID (X) .X>
+
+<DEFINE ENTROPY ("ARGS" L) ()>
+
+<DEFINE IG ("TUPLE" M) <1 .L>>
+
+"LIST SPLICER NCONC"
+
+<DEFINE NCONC1 (L1 L2)
+       <COND   (<EMPTY? .L1> .L2)
+               (<EMPTY? .L2> .L1)
+               (T <RPLACD
+                       <REST .L1 <- <LENGTH .L1> 1>>
+                       .L2>
+                 .L1)>>
+
+
+"MULTIPLE LIST SPLICER"
+
+<DEFINE NCONC ("TUPLE" L)
+       <COND   (<EMPTY? .L> ())
+               (T  <REPEAT ((T <LENGTH .L>) (ANS <.T .L>))
+                       <COND (<0? <SET T <- .T 1>>> <RETURN .ANS>)>
+                       <SET ANS <NCONC1 <.T .L> .ANS>>>)>>>
+
+
+
+<DEFINE HACK ("TUPLE" L)
+       <COND (<EMPTY? .L> 'NONE-OF-YOUR-BUSINESS)
+               (<==? <TYPE <1 .L>> FIX> <<1 .L> .L>)
+               (T <<LENGTH .L> .L>)>>
+
+"GENERALIZED MAPPER FUNCTION ACCORDING TO THE GOSPEL OF SUSSMAN"
+
+
+<DEFINE *MAP (F L INMAP OUTMAP "AUX" L1 M (DONEF 1)"ACT" G)
+
+"THE ARGUMENTS ARE AS FOLLOWS
+
+       F - THE FUNCTION TO APPLY
+       L - A TUPLE OF LISTS WHOSE ELEMTS ARE TO BE USED AS ARGS
+       INMAP - FUNCTION USED TO GET EACH ELEMENT
+       OUTMAP - FUNCTION TO PROCESS THE VALUES
+"
+
+       <STACKFORM .OUTMAP
+               <HACK <SET M .L>
+                 <STACKFORM .F
+                       <HACK 3 <COND (<EMPTY? <SET L1 <1 .M>>>
+                                       <EXIT .G ()>)>
+                          <.INMAP .L1>
+                          <COND (<AND <EMPTY? <SETLOC <AT .M 1> <REST .L1>>>
+                                       <G? .DONEF 0>>
+                                 <SET DONEF -1>)>
+                         <SET M <REST .M>>>
+                       <NOT <EMPTY? .M>>>>
+               <NOT <0? <SET DONEF <+ .DONEF 1>>>>>>
+
+
+"SPECIFIC INVOCATIONS OF *MAP"
+
+<DEFINE MAPLIST (F "TUPLE" L)
+       <*MAP .F .L ,ID ,LIST>>
+
+<DEFINE MAP (F "TUPLE" L)
+       <*MAP .F .L ,ID ,IG>>
+
+<DEFINE MAPCAR (F "TUPLE" L)
+       <*MAP .F .L 1 ,LIST>>
+
+<DEFINE MAPC (F "TUPLE" L)
+       <*MAP .F .L 1 ,IG>>
+
+<DEFINE MAPCON (F "TUPLE" L)
+       <*MAP .F .L  ,ID ,NCONC>>
+
+<DEFINE MAPCAN (F "TUPLE" L)
+       <*MAP .F .L 1 ,NCONC>>
+\f\ 3\f
\ No newline at end of file