#fn #d2 #apl-j #duo-combinators #m1

组合器

受到 APL/J 启发的组合器

3 个版本

0.1.2 2022 年 1 月 26 日
0.1.1 2022 年 1 月 2 日
0.1.0 2022 年 1 月 2 日

19#fn

MIT 许可证

9KB
78

双组合器

叠加

      /x:A
M1-D2<
      \y:B 

M1.AT(D2) (x,y)
M1: Fn(C)->D
D2: Fn(A,B)->C

对置

   /M2-x:A
D1<
   \M2-y:A

D1.AP(M2) (x,y)
D1: Fn(B,B)->C
M2: Fn(A)->B

组合

M1-M2-y:B

M1.CP(M2) (y)
M1: Fn(D)->E
M2: Fn(B)->C

钩子

   /x:A
D1<
   \M2-y:B

D1.HK(M2)(x,y)
D1: Fn(A,C)->D
M2: Fn(B)->C

单钩子

   (y)
   / \
D1<   \
   \M2-y:B

D1.MH(M2)(y)
D1: Fn(B,C)->D
M2: Fn(B)->C

反转钩子

    (y)
   /   \ /M-x:A
D1<     X
   \   / \-y:B
 (M2(x))

D1.RH(M2)(x,y)
D1: Fn(B,C)->D
M2: Fn(A)->C

单组合器

反射

   (y)
   / \
D1<   >y:B
   \ /
   (y)

D1.RF()(y)
D1 : (B,B)->C

翻转

   (y)
   / \ /x:A
D1<   X
   \ / \y:B
   (x)

D1.FL()(x,y)
D1 : Fn(B,A)->C

lib.rs:

双组合器

叠加

      /x:A
M1-D2<
      \y:B 

M1.AT(D2) (x,y)
M1: Fn(C)->D
D2: Fn(A,B)->C

对置

   /M2-x:A
D1<
   \M2-y:A

D1.AP(M2) (x,y)
D1: Fn(B,B)->C
M2: Fn(A)->B

组合

M1-M2-y:B

M1.CP(M2) (y)
M1: Fn(D)->E
M2: Fn(B)->C

钩子

   /x:A
D1<
   \M2-y:B

D1.HK(M2)(x,y)
D1: Fn(A,C)->D
M2: Fn(B)->C

单钩子

   (y)
   / \
D1<   \
   \M2-y:B

D1.MH(M2)(y)
D1: Fn(B,C)->D
M2: Fn(B)->C

反转钩子

    (y)
   /   \ /M-x:A
D1<     X
   \   / \-y:B
 (M2(x))

D1.RH(M2)(x,y)
D1: Fn(B,C)->D
M2: Fn(A)->C

单组合器

反射

   (y)
   / \
D1<   >y:B
   \ /
   (y)

D1.RF()(y)
D1 : (B,B)->C

翻转

   (y)
   / \ /x:A
D1<   X
   \ / \y:B
   (x)

D1.FL()(x,y)
D1 : Fn(B,A)->C

无运行时依赖