]> git.eli173.com Git - klapaucius/commitdiff
changed z combintaor semantics, added range example
authorElijah Cohen <eli@eli173.com>
Tue, 15 Oct 2024 18:27:56 +0000 (13:27 -0500)
committerElijah Cohen <eli@eli173.com>
Tue, 15 Oct 2024 18:27:56 +0000 (13:27 -0500)
demos.kl
src/builtins/combinators.c

index 5ac7f56f9776aaa962b397cf1d5f7bc4ccdc9672..2f1e5ece10f52eafeee101430d871bdee714eaa7 100644 (file)
--- a/demos.kl
+++ b/demos.kl
@@ -1,5 +1,12 @@
 (def D (B B))
 
-(def g (D S (C (eq 0) 1) (D S * (C B (C - 1)))))
+(def fachelp (D S (C (eq 0) 1) (D S * (C B (C - 1)))))
+
+(def fac (Z fachelp))
+
+(def rh (B B S (S (B (eq 0) car) cdr) (C B (Phi cons (B (C - 1) car) (Phi cons car cdr)))))
+
+(def range (S (C (eq 0) nil) (B (Z rh) (C cons nil))))
+
+(def fph (B (S (Phi (eq nil) cdr car)) (C B (Phi cons (Phi + car (B car cdr)) (B cdr cdr)))))
 
-(def fac (Z g))
\ No newline at end of file
index cefc6dc7fc8886ccf07187db07900cc08f65c14f..9b3f4d12127e159e82b25b06120ddb4b094ae601 100644 (file)
@@ -129,7 +129,9 @@ Sexpr* c_z(Sexpr* b, Sexpr* rest, Sexpr* env) {
        }
        Sexpr* args = b->value.b.args;
        Sexpr* g = clone(car(cdr(args)));
-       Sexpr* v = clone(car(args));
+       Sexpr* v = eval(clone(car(args)), env);
+       // man that eval does a /lot/ for computation,
+       // need to think about what this implies
        sexpr_free(b);
        Sexpr* g2 = clone(g);
        Sexpr* z = from_opcode((COMB_PREFIX << 8) | COMB_Z);