ref: 0f5595c4d8976e7da71a6b414bc0c5f084ace203
parent: 33f575d0a94f98c9b36c51bb696ecc1b30da6e28
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Aug 20 11:25:25 EDT 2023
Rename T combinator to A
--- a/comb/mhs.comb
+++ b/comb/mhs.comb
@@ -1,3 +1,3 @@
-v2.0
+v2.1
647
-(($T :0 ((_475 _429) ((($S' ($C ((($C' ($S' _475)) ($C _2)) (($B ($B (_475 _503))) ((($C' ($S' $C)) ((($C' ($C' $C)) ((($C' ($C' ($C' $S'))) (($B ($B ($B $C))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($S' $B))))) ((($C' ($C' ($C' ($C' ($C' $S))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' ($C' $B)))))) ((($C' ($C' ($C' ($S' ($C' $B))))) (($B ($B ($B ($B ($B $B))))) ((($C' ($C' ($C' ($C' $B)))) ((($S' $B) (($B $B) (($B $B) (($B $C') (($B ($S' _476)) ((($C' $B) (($B _560) (($B _493) ((($C' _597) _8) 0)))) (($B (_560 _496)) (($B (_507 (($O 116) (($O 111) (($O 112) (($O 32) (($O 108) (($O 101) (($O 118) (($O 101) (($O 108) (($O 32) (($O 100) (($O 101) (($O 102) (($O 110) (($O 115) (($O 58) (($O 32) $K))))))))))))))))))) _457)))))))) ((($S' $B) (($B $B) (($B ($C' $B)) (($B ($B $B)) (($B ($B _476)) ((($C' $B) (($B _560) (($B _493) ((($C' _597) _8) 1)))) (_492 (($C $I) (($B ($B (_560 _496))) ((($C' $B) _507) (($B (_507 (($O 32) (($O 61) (($O 32) $K))))) _223))))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _9))) ((($S' $B) (($B ($C' ($C' _476))) ((($C' $B) (($B $B) (($B _560) (($B _498) _11)))) (($B ($B (_507 _1))) (($B (($C' _507) _457)) (_507 (($O 10) $K))))))) (($B ($B (_475 _503))) ((($C' $B) (($B $B) (($B _560) (($B _493) ((($C' _597) _8) 0))))) (($B ($B (_560 _496))) (($B ($B (_507 (($O 102) (($O 105) (($O 110) (($O 97) (($O 108) (($O 32) (($O 112) (($O 97) (($O 115) (($O 115) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) $K))))))))))))))))))))))))) ((($C' ($C' _507)) (($B ($B (_470 6))) (($B ($B _457)) _591))) (($O 109) (($O 115) $K)))))))))) _3)))) _454))) (($B (($C' $C) (($B ($C _512)) _223))) (($C _525) (_540 0))))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B ($B $K))) (($B ($B ($B ($B (_507 (($O 40) (($O 40) (($O 36) (($O 84) (($O 32) (($O 58) $K))))))))))) (($B ($B (($C' $B) (($B _507) _457)))) (($B ($B ($B (_507 (($O 32) $K))))) ((($C' $B) (($B ($C' _507)) ($B _223))) (($B (_507 (($O 41) (($O 32) $K)))) (($C _507) (($O 41) $K))))))))))))) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _203)) $I))) (($B $K) $K))) $K)) $K))))) ($C $I))) (($B (($S' _560) (($B _557) (($B (_560 _605)) (($B (_507 (($O 109) (($O 97) (($O 105) (($O 110) (($O 58) (($O 32) (($O 102) (($O 105) (($O 110) (($O 100) (($O 73) (($O 100) (($O 101) (($O 110) (($O 116) (($O 58) (($O 32) $K))))))))))))))))))) _291))))) ($C _447)))) (($B ($B _451)) (($B (($C' _509) (($B ($C $I)) (($B ($C $B)) (($B ($B ($B $K))) ((($C' ($C' ($C' $O))) ($B ($C $P))) $K)))))) (($C _525) (_540 0)))))) (($B (_560 _202)) (($B (_507 (($O 95) $K))) _457))))) (($C $I) $T))) (($C $I) $K))) (($B $Y) $K)))))) (($S (($S ((($S' _7) (($B _524) (_511 (_468 (($O 45) (($O 118) $K)))))) ((_539 _468) (($O 45) (($O 114) $K))))) (($B (_505 (($O 46) $K))) (($B _559) (_510 ((_529 _582) (($O 45) (($O 105) $K)))))))) (($B (_560 _534)) ((($C' _507) (($B _559) (_510 ((_529 _582) (($O 45) (($O 111) $K)))))) (($O (($O 111) (($O 117) (($O 116) (($O 46) (($O 99) (($O 111) (($O 109) (($O 98) $K))))))))) $K))))) (($B (($S (($C ((($C' _593) _524) 1)) (_605 (($O 85) (($O 115) (($O 97) (($O 103) (($O 101) (($O 58) (($O 32) (($O 117) (($O 104) (($O 115) (($O 32) (($O 91) (($O 45) (($O 118) (($O 93) (($O 32) (($O 91) (($O 45) (($O 114) (($O 93) (($O 32) (($O 91) (($O 45) (($O 105) (($O 80) (($O 65) (($O 84) (($O 72) (($O 93) (($O 32) (($O 91) (($O 45) (($O 111) (($O 70) (($O 73) (($O 76) (($O 69) (($O 93) (($O 32) (($O 77) (($O 111) (($O 100) (($O 117) (($O 108) (($O 101) (($O 78) (($O 97) (($O 109) (($O 101) $K)))))))))))))))))))))))))))))))))))))))))))))))))))) _534)) (_511 ((_561 _602) ((_561 (_468 (($O 45) $K))) (_522 1)))))))) (($T :1 (($O 118) (($O 50) (($O 46) (($O 48) (($O 10) $K)))))) (($T :2 ((($S' ($S' _475)) _16) (($B ($B ($B (_475 _503)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _476) (($B (_560 _494)) (($B (_560 (_523 1000000))) _38)))))) (($B ($B ($B ($B (_475 _503))))) ((($C
\ No newline at end of file
+(($A :0 ((_475 _429) ((($S' ($C ((($C' ($S' _475)) ($C _2)) (($B ($B (_475 _503))) ((($C' ($S' $C)) ((($C' ($C' $C)) ((($C' ($C' ($C' $S'))) (($B ($B ($B $C))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($S' $B))))) ((($C' ($C' ($C' ($C' ($C' $S))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' ($C' $B)))))) ((($C' ($C' ($C' ($S' ($C' $B))))) (($B ($B ($B ($B ($B $B))))) ((($C' ($C' ($C' ($C' $B)))) ((($S' $B) (($B $B) (($B $B) (($B $C') (($B ($S' _476)) ((($C' $B) (($B _560) (($B _493) ((($C' _597) _8) 0)))) (($B (_560 _496)) (($B (_507 (($O 116) (($O 111) (($O 112) (($O 32) (($O 108) (($O 101) (($O 118) (($O 101) (($O 108) (($O 32) (($O 100) (($O 101) (($O 102) (($O 110) (($O 115) (($O 58) (($O 32) $K))))))))))))))))))) _457)))))))) ((($S' $B) (($B $B) (($B ($C' $B)) (($B ($B $B)) (($B ($B _476)) ((($C' $B) (($B _560) (($B _493) ((($C' _597) _8) 1)))) (_492 (($C $I) (($B ($B (_560 _496))) ((($C' $B) _507) (($B (_507 (($O 32) (($O 61) (($O 32) $K))))) _223))))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _9))) ((($S' $B) (($B ($C' ($C' _476))) ((($C' $B) (($B $B) (($B _560) (($B _498) _11)))) (($B ($B (_507 _1))) (($B (($C' _507) _457)) (_507 (($O 10) $K))))))) (($B ($B (_475 _503))) ((($C' $B) (($B $B) (($B _560) (($B _493) ((($C' _597) _8) 0))))) (($B ($B (_560 _496))) (($B ($B (_507 (($O 102) (($O 105) (($O 110) (($O 97) (($O 108) (($O 32) (($O 112) (($O 97) (($O 115) (($O 115) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) (($O 32) $K))))))))))))))))))))))))) ((($C' ($C' _507)) (($B ($B (_470 6))) (($B ($B _457)) _591))) (($O 109) (($O 115) $K)))))))))) _3)))) _454))) (($B (($C' $C) (($B ($C _512)) _223))) (($C _525) (_540 0))))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B ($B $K))) (($B ($B ($B ($B (_507 (($O 40) (($O 40) (($O 36) (($O 65) (($O 32) (($O 58) $K))))))))))) (($B ($B (($C' $B) (($B _507) _457)))) (($B ($B ($B (_507 (($O 32) $K))))) ((($C' $B) (($B ($C' _507)) ($B _223))) (($B (_507 (($O 41) (($O 32) $K)))) (($C _507) (($O 41) $K))))))))))))) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _203)) $I))) (($B $K) $K))) $K)) $K))))) ($C $I))) (($B (($S' _560) (($B _557) (($B (_560 _605)) (($B (_507 (($O 109) (($O 97) (($O 105) (($O 110) (($O 58) (($O 32) (($O 102) (($O 105) (($O 110) (($O 100) (($O 73) (($O 100) (($O 101) (($O 110) (($O 116) (($O 58) (($O 32) $K))))))))))))))))))) _291))))) ($C _447)))) (($B ($B _451)) (($B (($C' _509) (($B ($C $I)) (($B ($C $B)) (($B ($B ($B $K))) ((($C' ($C' ($C' $O))) ($B ($C $P))) $K)))))) (($C _525) (_540 0)))))) (($B (_560 _202)) (($B (_507 (($O 95) $K))) _457))))) (($C $I) $A))) (($C $I) $K))) (($B $Y) $K)))))) (($S (($S ((($S' _7) (($B _524) (_511 (_468 (($O 45) (($O 118) $K)))))) ((_539 _468) (($O 45) (($O 114) $K))))) (($B (_505 (($O 46) $K))) (($B _559) (_510 ((_529 _582) (($O 45) (($O 105) $K)))))))) (($B (_560 _534)) ((($C' _507) (($B _559) (_510 ((_529 _582) (($O 45) (($O 111) $K)))))) (($O (($O 111) (($O 117) (($O 116) (($O 46) (($O 99) (($O 111) (($O 109) (($O 98) $K))))))))) $K))))) (($B (($S (($C ((($C' _593) _524) 1)) (_605 (($O 85) (($O 115) (($O 97) (($O 103) (($O 101) (($O 58) (($O 32) (($O 117) (($O 104) (($O 115) (($O 32) (($O 91) (($O 45) (($O 118) (($O 93) (($O 32) (($O 91) (($O 45) (($O 114) (($O 93) (($O 32) (($O 91) (($O 45) (($O 105) (($O 80) (($O 65) (($O 84) (($O 72) (($O 93) (($O 32) (($O 91) (($O 45) (($O 111) (($O 70) (($O 73) (($O 76) (($O 69) (($O 93) (($O 32) (($O 77) (($O 111) (($O 100) (($O 117) (($O 108) (($O 101) (($O 78) (($O 97) (($O 109) (($O 101) $K)))))))))))))))))))))))))))))))))))))))))))))))))))) _534)) (_511 ((_561 _602) ((_561 (_468 (($O 45) $K))) (_522 1)))))))) (($A :1 (($O 118) (($O 50) (($O 46) (($O 49) (($O 10) $K)))))) (($A :2 ((($S' ($S' _475)) _16) (($B ($B ($B (_475 _503)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _476) (($B (_560 _494)) (($B (_560 (_523 1000000))) _38)))))) (($B ($B ($B ($B (_475 _503))))) ((($C
\ No newline at end of file
--- a/src/MicroHs/Exp.hs
+++ b/src/MicroHs/Exp.hs
@@ -307,7 +307,7 @@
aa = improveT a
in
if isK ff && isI aa then
- Prim "T"
+ Prim "A"
-- else if isI ff then
-- aa
else
@@ -333,12 +333,12 @@
-}
{---- K I --> T
+-- K I --> A
-- Y (K e) --> e
-- K x y --> x
improveT (App f a) =
case (improveT f, improveT a) of
- (CK, CI) -> CT
+ (CK, CI) -> CA
-- (CI, e) -> e
(CY, App CK e) -> e
-- (App CK e1, e2) -> e1
--- a/src/MicroHs/Main.hs
+++ b/src/MicroHs/Main.hs
@@ -42,7 +42,7 @@
--def :: ((Ident, Exp), Int) -> String -> String
def d r =
case d of
- ((_, e), i) -> "(($T :" ++ showInt i ++ " " ++ toStringP (substv e) ++ ") " ++ r ++ ")"
+ ((_, e), i) -> "(($A :" ++ showInt i ++ " " ++ toStringP (substv e) ++ ") " ++ r ++ ")"
-- App2 CT (Lbl i (subst e)) r
res = foldr def (toStringP emain) (zip ds (enumFrom 0))
numDefs = M.size defs
@@ -63,7 +63,7 @@
putStrLn $ "final pass " ++ padLeft 6 (showInt (t2-t1)) ++ "ms"
version :: String
-version = "v2.0\n"
+version = "v2.1\n"
type Program = (Ident, [LDef])
--- a/src/MicroHs/Translate.hs
+++ b/src/MicroHs/Translate.hs
@@ -42,7 +42,7 @@
("K", primitive "K"), ("C'", primitive "C'"), ("C", primitive "C"),- ("T", primitive "T"),+ ("A", primitive "A"), ("S'", primitive "S'"), ("P", primitive "P"), ("I", primitive "I"),--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -12,7 +12,7 @@
#define FASTTAGS 1
#define UNIONPTR 1
-#define VERSION "v2.0\n"
+#define VERSION "v2.1\n"
#define HEAP_CELLS 100000
#define STACK_SIZE 10000
@@ -20,7 +20,7 @@
#define ERR(s) do { fprintf(stderr, "ERR: %s\n", s); exit(1); } while(0) enum node_tag { FREE, IND, AP, INT, HDL, S, K, I, B, C, /* 0 - 9 */- T, Y, SS, BB, CC, P, O, ADD, SUB, MUL, /* 10 - 19 */
+ A, Y, SS, BB, CC, P, O, ADD, SUB, MUL, /* 10 - 19 */
QUOT, REM, SUBR, EQ, NE, LT, LE, GT, GE, ERROR, /* 20-29 */
IO_BIND, IO_THEN, IO_RETURN, IO_GETCHAR, IO_PUTCHAR, /* 30-34 */
IO_SERIALIZE, IO_DESERIALIZE, IO_OPEN, IO_CLOSE, IO_ISNULLHANDLE, /* 35-39 */
@@ -212,7 +212,7 @@
}
/* Needed during reduction */
-NODEPTR combK, combT, combI, combO;
+NODEPTR combFalse, comTrue, combI, combCons;
NODEPTR combCC, combIOBIND;
/* One node of each kind for primitives, these are never GCd. */
@@ -231,7 +231,7 @@
{ "K", K }, { "C'", CC }, { "C", C },- { "T", T },+ { "A", A }, { "S'", SS }, { "P", P }, { "I", I },@@ -288,10 +288,10 @@
//MARK(n) = MARKED;
SETTAG(n, primops[j].tag);
switch (primops[j].tag) {- case K: combK = n; break;
- case T: combT = n; break;
+ case K: combFalse = n; break;
+ case A: comTrue = n; break;
case I: combI = n; break;
- case O: combO = n; break;
+ case O: combCons = n; break;
case CC: combCC = n; break;
case IO_BIND: combIOBIND = n; break;
case IO_STDIN: SETTAG(n, HDL); HANDLE(n) = stdin; break;
@@ -306,10 +306,10 @@
NODEPTR n = HEAPREF(heap_start++);
SETTAG(n, t);
switch (t) {- case K: combK = n; break;
- case T: combT = n; break;
+ case K: combFalse = n; break;
+ case A: comTrue = n; break;
case I: combI = n; break;
- case O: combO = n; break;
+ case O: combCons = n; break;
case CC: combCC = n; break;
case IO_BIND: combIOBIND = n; break;
case IO_STDIN: SETTAG(n, HDL); HANDLE(n) = stdin; break;
@@ -762,7 +762,7 @@
case I: fprintf(f, "$I"); break;
case C: fprintf(f, "$C"); break;
case B: fprintf(f, "$B"); break;
- case T: fprintf(f, "$T"); break;
+ case A: fprintf(f, "$A"); break;
case Y: fprintf(f, "$Y"); break;
case P: fprintf(f, "$P"); break;
case O: fprintf(f, "$O"); break;
@@ -998,7 +998,7 @@
n = TOP(0);
SETIND(n, x);
GOTO ind;
- case T: /* T x y = * y */
+ case A: /* A x y = * y */
CHECK(2);
x = ARG(TOP(2));
POP(2);
@@ -1100,7 +1100,7 @@
CHECK(2); r = evalint(ARG(TOP(2))) - evalint(ARG(TOP(1))); n = TOP(2); SETINT(n, r); POP(2);
RET;
-#define CMP(op) do { CHECK(2); r = evalint(ARG(TOP(1))) op evalint(ARG(TOP(2))); n = TOP(2); SETIND(n, r ? combT : combK); POP(2); } while(0)+#define CMP(op) do { CHECK(2); r = evalint(ARG(TOP(1))) op evalint(ARG(TOP(2))); n = TOP(2); SETIND(n, r ? comTrue : combFalse); POP(2); } while(0)case EQ:
CMP(==);
break;
@@ -1129,7 +1129,7 @@
CHECK(1);
hdl = evalhandleN(ARG(TOP(1)));
n = TOP(1);
- SETIND(n, hdl == 0 ? combT : combK);
+ SETIND(n, hdl == 0 ? comTrue : combFalse);
POP(1);
break;
case IO_BIND:
@@ -1162,13 +1162,13 @@
NODEPTR
mkNil(void)
{- return combK;
+ return combFalse;
}
NODEPTR
mkCons(NODEPTR x, NODEPTR xs)
{- return new_ap(new_ap(combO, x), xs);
+ return new_ap(new_ap(combCons, x), xs);
}
NODEPTR
--
⑨