Created
March 17, 2024 05:11
-
-
Save bbaaxx/80128b4ebb0bf40313061d1df6494833 to your computer and use it in GitHub Desktop.
Playing with Birbs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Kestrel | |
export const K = a => () => a | |
// Starling | |
export const S = a => b => c => a(c)(b(c)) | |
// Idiot : a => a | |
export const I = S(K)(K) | |
// Bluebird : a => b => c => a(b(c)) | |
export const B = S(K(S))(K) | |
// Cardinal : a => b => c => a(c)(b) | |
export const C = S(B(B)(S))(K(K)) | |
// Trush : a => b => b(a) | |
export const T = C(I) | |
// Dove : a => b => c => d => a(b)(c(d)) | |
export const D = B(B) | |
// Eagle : a => b => c => d => e => a(b)(c(d)(e)) | |
export const E = B(B(B)(B)) | |
// Finch : a => b => c => c(b)(a) | |
export const F = E(T)(T)(E)(T) | |
// Goldfinch : a => b => c => d => a(d)(b(c)) | |
export const G = B(B)(C) | |
// Robin : a => b => c => b(c)(a) | |
export const R = B(B)(T) | |
// Mockingbird : a => a(a) | |
export const M = S(I)(I) | |
// Warbler : a => b => a(b)(b) | |
export const W = C(B(M)(R)) | |
// Hummingbird : a => b => c => a(b)(c)(b) | |
export const H = B(W)(B(C)) | |
// Jay : a => b => c => d => a(b)(a(d)(c)) | |
export const J = B(B(C))(W(B(C)(B(B(B)(B))))) | |
// Lark : a => b => a(b(b)) | |
export const L = C(B)(M) | |
// Owl : a => b => b(a(b)) | |
export const O = S(I) | |
// Queer Bird : a => b => c => b(a(c)) | |
export const Q = C(B) | |
// Turing : a => b => b(a(a)(b)) | |
export const U = L(O) | |
// Vireo (aka Pairing) : a => b => c => c(a)(b) | |
export const V = B(C)(T) | |
const Y = S(L(L)) | |
// const Y = S(L)(L) | |
const uY = a => (b => b(b))(b => a(c => b(b)(c))) | |
const Yu = a => (b => c => a(b(b))(c))(b => c => a(b(b))(c)) | |
const Ye = a => (b => c => a(b(b))(c))(b => c => a(b(b))(c)) | |
// Blackbird : a => b => c => d => a(b(c)(d)) | |
export const B1 = B(B)(B) | |
// Bunting : a => b => c => d => e => a(b(c)(d)(e)) | |
export const B2 = B(B(B)(B))(B) | |
// Becard : a => b => c => d => a(b(c(d))) | |
export const B3 = B(B(B))(B) | |
// Cardinal (Once Removed) : a => b => c => d => a(b)(d)(c) | |
export const C_ = B(C) | |
// Cardinal (Twice Removed) : a => b => c => d => e => a(b)(c)(e)(d) | |
export const C__ = C_ | |
// Dickcissel : a => b => c => d => e => a(b)(c)(d(e)) | |
export const D1 = B(B(B)) | |
// Dovekies : a => b => c => d => e => a(b(c))(d(e)) | |
export const D2 = B(B)(B(B)) | |
const uF_ = a => b => c => d => a(d)(c)(b) | |
const F_ = B(C)(R) | |
const uF__ = a => b => c => d => e => a(b)(e)(d)(c) | |
const uI_ = a => b => a(b) | |
const uI__ = a => b => c => a(b)(c) | |
const uM2 = a => b => a(b)(a(b)) | |
const uQ1 = a => b => c => a(c(b)) | |
const uQ2 = a => b => c => b(c(a)) | |
const uQ3 = a => b => c => c(a(b)) | |
const uQ4 = a => b => c => c(b(a)) | |
const uR_ = a => b => c => d => a(c)(d)(b) | |
const uR__ = a => b => c => d => e => a(b)(d)(e)(c) | |
const uV_ = a => b => c => d => a(c)(b)(d) | |
const uV__ = a => b => c => d => e => a(b)(e)(c)(d) | |
const uW_ = a => b => c => a(b)(c)(c) | |
const uW__ = a => b => c => d => a(b)(c)(d)(d) | |
const uW1 = a => b => b(a)(a) | |
const sumXY = x => y => x + y | |
const sumXYZ = x => y => z => x + y + z | |
const sumWXYZ = w => x => y => z => w + x + y + z | |
const multXY = x => y => x * y | |
const add2 = sumXY(2) | |
const by2 = multXY(2) | |
const by10 = multXY(10) | |
const ops = { | |
K: K(80)("whatevs"), | |
S: S(multXY)(add2)(8), | |
I: I(80), | |
B: B(by10)(add2)(6), | |
C: C(sumXY)(70)(10), | |
T: T(8)(by10), | |
D: D(sumXY)(10)(by10)(7), | |
E: E(sumXY)(10)(sumXY)(40)(30), | |
F: F(8)(10)(multXY), | |
G: G(sumXY)(by10)(7)(10), | |
R: R(8)(multXY)(10), | |
M: M((me, x, n) => 80), | |
W: W(sumXY)(40), | |
H: H(sumXYZ)(15)(50), | |
J: J(sumXY)(40)(30)(10), | |
L: L(by10)(() => 8), | |
O: O(() => 8)(by10), | |
Q: Q(by10)(by2)(4), | |
U: U(a => b => b(0.8))(by10), | |
V: V(8)(10)(multXY), | |
B1: B1(by2)(sumXY)(20)(20), | |
B2: B2(by10)(sumXYZ)(1)(3)(4), | |
B3: B3(by10)(add2)(add2)(4), | |
C_: C_(sumXYZ)(5)(35)(40), | |
C__: C__(sumWXYZ)(3)(35)(40)(2), | |
D1: D1(sumXYZ)(10)(30)(by10)(4), | |
D2: D2(sumXY)(by10)(3)(by10)(5), | |
} | |
const test = { | |
uF_: uF_(sumXYZ)(2)(4)(6), | |
// F_: F_(sumXYZ)(2)(4)(6), | |
uY: uY(me => n => (n >= 80 ? n : me(n + 1)))(10), | |
Y: Y(me => n => (n >= 80 ? n : me(n + 1))), | |
Yu: Yu(me => n => (n >= 80 ? n : me(n + 1)))(10), | |
Ye: Ye(me => n => (n >= 80 ? n : me(n + 1)))(10), | |
} | |
Object.entries(ops).forEach(([k, v]) => | |
console.log(`${k} -> ${v}`), | |
) | |
Object.entries(test).forEach(([k, v]) => | |
console.log(`Test: ${k} -> ${v}`), | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const getNumEqTest = (c) => ([k, v]) => | |
it(k, () => expect(v).toEqual(c)); | |
const getTest = getNumEqTest(80); | |
const sumXY = (x) => (y) => x + y; | |
const sumXYZ = (x) => (y) => (z) => x + y + z; | |
const sumWXYZ = (w) => (x) => (y) => (z) => w + x + y + z; | |
const multXY = (x) => (y) => x * y; | |
const add2 = sumXY(2); | |
const by2 = multXY(2); | |
const by10 = multXY(10); | |
// Kestrel | |
const K = (a) => () => a; | |
getTest(["K", K(80)("whatevs")]); | |
// Starling | |
const S = (a) => (b) => (c) => a(c)(b(c)); | |
getTest(["S", S(multXY)(add2)(8)]); | |
// Idiot : a => a | |
const I = S(K)(K); | |
// Bluebird : a => b => c => a(b(c)) | |
const B = S(K(S))(K); | |
// Cardinal : a => b => c => a(c)(b) | |
const C = S(B(B)(S))(K(K)); | |
// Trush : a => b => b(a) | |
const T = C(I); | |
// Dove : a => b => c => d => a(b)(c(d)) | |
const D = B(B); | |
// Eagle : a => b => c => d => e => a(b)(c(d)(e)) | |
const E = B(B(B)(B)); | |
// Finch : a => b => c => c(b)(a) | |
const F = E(T)(T)(E)(T); | |
// Goldfinch : a => b => c => d => a(d)(b(c)) | |
const G = B(B)(C); | |
// Robin : a => b => c => b(c)(a) | |
const R = B(B)(T); | |
// Mockingbird : a => a(a) | |
const M = S(I)(I); | |
// Warbler : a => b => a(b)(b) | |
const W = C(B(M)(R)); | |
// Hummingbird : a => b => c => a(b)(c)(b) | |
const H = B(W)(B(C)); | |
// Jay : a => b => c => d => a(b)(a(d)(c)) | |
const J = B(B(C))(W(B(C)(B(B(B)(B))))); | |
// Lark : a => b => a(b(b)) | |
const L = C(B)(M); | |
// Owl : a => b => b(a(b)) | |
const O = S(I); | |
// Queer Bird : a => b => c => b(a(c)) | |
const Q = C(B); | |
// Turing : a => b => b(a(a)(b)) | |
const U = L(O); | |
// Vireo (aka Pairing) : a => b => c => c(a)(b) | |
const V = B(C)(T); | |
const Y = S(L(L)); | |
// const Y = S(L)(L) | |
const uY = (a) => ((b) => b(b))((b) => a((c) => b(b)(c))); | |
const Yu = (a) => ((b) => (c) => a(b(b))(c))((b) => (c) => a(b(b))(c)); | |
const Ye = (a) => ((b) => (c) => a(b(b))(c))((b) => (c) => a(b(b))(c)); | |
// Blackbird : a => b => c => d => a(b(c)(d)) | |
const B1 = B(B)(B); | |
// Bunting : a => b => c => d => e => a(b(c)(d)(e)) | |
const B2 = B(B(B)(B))(B); | |
// Becard : a => b => c => d => a(b(c(d))) | |
const B3 = B(B(B))(B); | |
// Cardinal (Once Removed) : a => b => c => d => a(b)(d)(c) | |
const C_ = B(C); | |
// Cardinal (Twice Removed) : a => b => c => d => e => a(b)(c)(e)(d) | |
const C__ = C_; | |
// Dickcissel : a => b => c => d => e => a(b)(c)(d(e)) | |
const D1 = B(B(B)); | |
// Dovekies : a => b => c => d => e => a(b(c))(d(e)) | |
const D2 = B(B)(B(B)); | |
const uF_ = (a) => (b) => (c) => (d) => a(d)(c)(b); | |
const F_ = B(C)(R); | |
const uF__ = (a) => (b) => (c) => (d) => (e) => a(b)(e)(d)(c); | |
const uI_ = (a) => (b) => a(b); | |
const uI__ = (a) => (b) => (c) => a(b)(c); | |
const uM2 = (a) => (b) => a(b)(a(b)); | |
const uQ1 = (a) => (b) => (c) => a(c(b)); | |
const uQ2 = (a) => (b) => (c) => b(c(a)); | |
const uQ3 = (a) => (b) => (c) => c(a(b)); | |
const uQ4 = (a) => (b) => (c) => c(b(a)); | |
const uR_ = (a) => (b) => (c) => (d) => a(c)(d)(b); | |
const uR__ = (a) => (b) => (c) => (d) => (e) => a(b)(d)(e)(c); | |
const uV_ = (a) => (b) => (c) => (d) => a(c)(b)(d); | |
const uV__ = (a) => (b) => (c) => (d) => (e) => a(b)(e)(c)(d); | |
const uW_ = (a) => (b) => (c) => a(b)(c)(c); | |
const uW__ = (a) => (b) => (c) => (d) => a(b)(c)(d)(d); | |
const uW1 = (a) => (b) => b(a)(a); | |
const aps = [ | |
["K", K(80)("whatevs")], | |
["S", S(multXY)(add2)(8)], | |
["I", I(80)], | |
["B", B(by10)(add2)(6)], | |
["C", C(sumXY)(70)(10)], | |
["T", T(8)(by10)], | |
["D", D(sumXY)(10)(by10)(7)], | |
["E", E(sumXY)(10)(sumXY)(40)(30)], | |
["F", F(8)(10)(multXY)], | |
["G", G(sumXY)(by10)(7)(10)], | |
["R", R(8)(multXY)(10)], | |
["M", M((me, x, n) => 80)], | |
["W", W(sumXY)(40)], | |
["H", H(sumXYZ)(15)(50)], | |
["J", J(sumXY)(40)(30)(10)], | |
["L", L(by10)(() => 8)], | |
["O", O(() => 8)(by10)], | |
["Q", Q(by10)(by2)(4)], | |
["U", U((a) => (b) => b(0.8))(by10)], | |
["V", V(8)(10)(multXY)], | |
["B1", B1(by2)(sumXY)(20)(20)], | |
["B2", B2(by10)(sumXYZ)(1)(3)(4)], | |
["B3", B3(by10)(add2)(add2)(4)], | |
["C_", C_(sumXYZ)(5)(35)(40)], | |
["C__", C__(sumWXYZ)(3)(35)(40)(2)], | |
["D1", D1(sumXYZ)(10)(30)(by10)(4)], | |
["D2", D2(sumXY)(by10)(3)(by10)(5)] | |
]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment