diff options
Diffstat (limited to 'sample/pseudo_higher_order/map.in')
| -rw-r--r-- | sample/pseudo_higher_order/map.in | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/sample/pseudo_higher_order/map.in b/sample/pseudo_higher_order/map.in new file mode 100644 index 0000000..c96daae --- /dev/null +++ b/sample/pseudo_higher_order/map.in @@ -0,0 +1,49 @@ +// Map operation + +// target function +inc(r)><(int i) => r~(i+1); +subPair(r)><(int m, int n) => r~(m-n); + + +// ----------- main (with the built-in Map and `%' notation) ----------- +Map(r, %inc) ~ [1,2,3]; +r; // r ->[2,3,4] + +Map(rr, %subPair) ~ [(10,2), (30,13)]; +rr; // r4 ->[8,17] + + + + +// ----------- main (without the built-in Map) ----------- +// map +map(result, f) >< [] => result~[], Eraser~f; +map(result, f) >< x:xs => Dup(f1,f2)~f, + result~w:ws, + f1 ~ (w, x), map(ws, f2)~xs; + + +// --- map application without the `%' notation --- +map(r1, (a, inc(a))) ~ [10,11,12]; +r1; // r1 ->[11,12,13] + +map(r2, (a, subPair(a))) ~ [(10,2), (30,13)]; +r2; // r2 ->[8,17] + + +// --- map application with the `%' notation --- +map(r3, %inc) ~ [1,2,3]; +r3; // r3 ->[2,3,4] + +map(r4, %subPair) ~ [(10,2), (30,13)]; +r4; // r4 ->[8,17] + + +// --- map application with `<<' abbriviation also +// --- It seems the simplest to read. +r5 << map(%inc, [100,200,300]); +r5; // r5 ->[101,201,301] + +r6 << map(%subPair, [(10,2), (30,13)]); +r6; // r6 ->[8,17] + |
