ITS Muddle.
[pdp10-muddle.git] / MUDDLE / mapper.9
1
2 <DEFINE ID (X) .X>
3
4 <DEFINE ENTROPY ("ARGS" L) ()>
5
6 <DEFINE IG ("TUPLE" M) <1 .L>>
7
8 "LIST SPLICER NCONC"
9
10 <DEFINE NCONC1 (L1 L2)
11         <COND   (<EMPTY? .L1> .L2)
12                 (<EMPTY? .L2> .L1)
13                 (T <RPLACD
14                         <REST .L1 <- <LENGTH .L1> 1>>
15                         .L2>
16                   .L1)>>
17
18
19 "MULTIPLE LIST SPLICER"
20
21 <DEFINE NCONC ("TUPLE" L)
22         <COND   (<EMPTY? .L> ())
23                 (T  <REPEAT ((T <LENGTH .L>) (ANS <.T .L>))
24                         <COND (<0? <SET T <- .T 1>>> <RETURN .ANS>)>
25                         <SET ANS <NCONC1 <.T .L> .ANS>>>)>>>
26
27
28
29 <DEFINE HACK ("TUPLE" L)
30         <COND (<EMPTY? .L> 'NONE-OF-YOUR-BUSINESS)
31                 (<==? <TYPE <1 .L>> FIX> <<1 .L> .L>)
32                 (T <<LENGTH .L> .L>)>>
33
34 "GENERALIZED MAPPER FUNCTION ACCORDING TO THE GOSPEL OF SUSSMAN"
35
36
37 <DEFINE *MAP (F L INMAP OUTMAP "AUX" L1 M (DONEF 1)"ACT" G)
38
39 "THE ARGUMENTS ARE AS FOLLOWS
40
41         F - THE FUNCTION TO APPLY
42         L - A TUPLE OF LISTS WHOSE ELEMTS ARE TO BE USED AS ARGS
43         INMAP - FUNCTION USED TO GET EACH ELEMENT
44         OUTMAP - FUNCTION TO PROCESS THE VALUES
45 "
46
47         <STACKFORM .OUTMAP
48                 <HACK <SET M .L>
49                   <STACKFORM .F
50                         <HACK 3 <COND (<EMPTY? <SET L1 <1 .M>>>
51                                         <EXIT .G ()>)>
52                            <.INMAP .L1>
53                            <COND (<AND <EMPTY? <SETLOC <AT .M 1> <REST .L1>>>
54                                         <G? .DONEF 0>>
55                                   <SET DONEF -1>)>
56                           <SET M <REST .M>>>
57                         <NOT <EMPTY? .M>>>>
58                 <NOT <0? <SET DONEF <+ .DONEF 1>>>>>>
59
60
61 "SPECIFIC INVOCATIONS OF *MAP"
62
63 <DEFINE MAPLIST (F "TUPLE" L)
64         <*MAP .F .L ,ID ,LIST>>
65
66 <DEFINE MAP (F "TUPLE" L)
67         <*MAP .F .L ,ID ,IG>>
68
69 <DEFINE MAPCAR (F "TUPLE" L)
70         <*MAP .F .L 1 ,LIST>>
71
72 <DEFINE MAPC (F "TUPLE" L)
73         <*MAP .F .L 1 ,IG>>
74
75 <DEFINE MAPCON (F "TUPLE" L)
76         <*MAP .F .L  ,ID ,NCONC>>
77
78 <DEFINE MAPCAN (F "TUPLE" L)
79         <*MAP .F .L 1 ,NCONC>>
80 \f\ 3\f