aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Sato <shinnya.sato@gmail.com>2022-12-29 23:41:35 +0900
committerShinya Sato <shinnya.sato@gmail.com>2022-12-29 23:41:35 +0900
commit1a2a94164334c9c73037edc77ea55aa7ddecc27a (patch)
tree2ed686f958c2b9f08ada7cdad30e8fdc3f2a0f12
parent8fdc0d64db6a9eb397afe829a0a26290ef368b53 (diff)
parent46d0da22df319007f6988734bcfe6a7ec0b96c92 (diff)
downloadinpla-1a2a94164334c9c73037edc77ea55aa7ddecc27a.tar.gz
inpla-1a2a94164334c9c73037edc77ea55aa7ddecc27a.zip
Merge branch 'develop'
-rw-r--r--sample/map.in10
-rw-r--r--sample/reduce.in57
2 files changed, 67 insertions, 0 deletions
diff --git a/sample/map.in b/sample/map.in
index 7997a44..c96daae 100644
--- a/sample/map.in
+++ b/sample/map.in
@@ -37,3 +37,13 @@ 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]
+
diff --git a/sample/reduce.in b/sample/reduce.in
new file mode 100644
index 0000000..90ba145
--- /dev/null
+++ b/sample/reduce.in
@@ -0,0 +1,57 @@
+// foldr, foldl functions
+
+
+// target functions
+// Here, we use built-in agents Add and Sub
+
+
+// --------------------------------------------------------------------
+// foldr f v [x0, x1, ..., xn] = f(x0, f(x1, ... f(xn-1, f(xn, v))...))
+// --------------------------------------------------------------------
+foldr(r, f, v) >< x:xs => foldr_Cons(r,f,v,x)~xs;
+foldr_Cons(r,f,v,x) >< [] => f~((r,x),v);
+foldr_Cons(r,f,v,x) >< y:ys =>
+ Dup(f1,f2)~f,
+ foldr(w, f2, v)~y:ys,
+ f1~((r,x),w);
+
+// --------------------------------------------------------------------
+// foldl f v [x0, x1, ..., xn] = f( ... f(f(v,x0),x1) ..., xn)
+// --------------------------------------------------------------------
+foldl(r, f, v) >< x:xs => foldl_Cons(r,f,v,x)~xs;
+foldl_Cons(r,f,v,x) >< [] => f~((r,v),x);
+foldl_Cons(r,f,v,x) >< y:ys =>
+ Dup(f1,f2)~f,
+ f1~((w,v),x),
+ foldl(r, f2, w)~y:ys;
+
+
+
+
+// ---------- main ----------
+
+// foldr f v [x0, x1, ..., xn] = f(x0, f(x1, ... f(xn-1, f(xn, v))...))
+// foldr plus 10 [1,2,3] = plus(1, plus(2, plus(3, 10))) = 16
+
+foldr(r, %Add, 10) ~ [1,2,3];
+r; free r; // r ->16
+
+
+// foldr subt 1 [30,20,10] = subt(30, subt(20, subt(10, 1)))
+// = 30-(20-(10-1)) = 30-(20-9) = 30-11 = 19
+
+foldr(r, %Sub, 1) ~ [30,20,10];
+r; free r; // r ->19
+
+
+
+// foldl f v [x0, x1, ..., xn] = f( ... f(f(v,x0),x1) ..., xn)
+// foldl plus 10 [1,2,3] = plus(3, plus(2, plus(1, 10))) = 16
+
+foldl(r, %Add, 10) ~ [1,2,3];
+r; free r; // r ->16
+
+
+// foldl subt 10 [1,2,3] = subt(subt(subt(10,1),2),3) = ((10-1)-2)-3 = 4
+foldl(r, %Sub, 10) ~ [1,2,3];
+r; free r; // r ->4