]> git.eli173.com Git - klapaucius/commitdiff
added unquote which i don't know what it does yet...
authorElijah Cohen <eli@eli173.com>
Wed, 30 Oct 2024 18:51:11 +0000 (13:51 -0500)
committerElijah Cohen <eli@eli173.com>
Wed, 30 Oct 2024 18:51:11 +0000 (13:51 -0500)
demos.kl
src/builtins/core.c
src/builtins/core.h

index 237a5766a8bd1ae1bc68e60badbc4893ce124ab0..a1da106beec4f3aa0539087f30d7831cb9677679 100644 (file)
--- a/demos.kl
+++ b/demos.kl
@@ -17,4 +17,4 @@
 
 (def map (B (B reverse) (B (B (Z (B (S (S (B (eq nil) (2 cdr)) (B car cdr))) (C B (S (B cons car) (Phi cons (Phi cons (S car (B (B car cdr) cdr)) (B car cdr)) (3 cdr))))))) (C (B B cons) (cons nil)))))
 
-(def fold (B (S (C (C (eq nil) nil) (Z (B (S (S (B (eq nil) (B cdr cdr)) (B car cdr))) (C B (S (B cons car) (Phi cons (S (S car (B car cdr)) (B car (2 cdr))) (3 cdr)))))))) cons))
\ No newline at end of file
+(def fold (B (S (C (C (eq nil) nil) (Z (B (S (S (B (eq nil) (B cdr cdr)) (B car cdr))) (C B (S (B cons car) (Phi cons (S (S car (B car cdr)) (B car (2 cdr))) (3 cdr)))))))) cons))
index 8d2aefc2562f8c5c7c785e4e1708e9ae51ff75e0..804c7cf4be59511f4fccc7edb6125d6d8bee267d 100644 (file)
@@ -162,6 +162,17 @@ Sexpr* c_rest(Sexpr* b, Sexpr* rest, Sexpr* env) {
        return cons(first_arg, cons(from_quote(newrest), from_nil()));
 }
 
+Sexpr* c_unquote(Sexpr* b, Sexpr* rest, Sexpr* env) {
+       // now the question here is, is it necessarily wrong
+       // to do this to non-quotes?
+       // this... needs an eval...
+       if(CORE_UNQUOTE_ARGS != u64_get_num_args(b))
+               return cons(b, rest);
+       Sexpr* first_arg = car(b->value.b.args);
+       Sexpr* newthing = eval(clone(unquote(first_arg)), env);
+       sexpr_free(b);
+       return cons(newthing, rest);
+}
 
 Sexpr* c_applyn(Sexpr* b, Sexpr* rest, Sexpr* env) {
        // possible commentary for the future:
@@ -234,6 +245,8 @@ Sexpr* x_core_dispatch(Sexpr* b, Sexpr* rest, Sexpr* env) {
                return c_atom(b, rest, env);
        case CORE_REST:
                return c_rest(b, rest, env);
+       case CORE_UNQUOTE:
+               return c_unquote(b, rest, env);
        case CORE_APPLYN:
                return c_applyn(b, rest, env);
        case CORE_DEF:
@@ -257,6 +270,7 @@ Sexpr* load_core_env(Sexpr* env) {
        load_builtin(CORE_NOT_STR, (CORE_PREFIX << 8) | CORE_NOT, env);
        load_builtin(CORE_ATOM_STR, (CORE_PREFIX << 8) | CORE_ATOM, env);
        load_builtin(CORE_REST_STR, (CORE_PREFIX << 8) | CORE_REST, env);
+       load_builtin(CORE_UNQUOTE_STR, (CORE_PREFIX << 8) | CORE_UNQUOTE, env);
        
        load_builtin(CORE_DEF_STR, (CORE_PREFIX << 8) | CORE_DEF, env);
        load_builtin(CORE_EXIT_STR, (CORE_PREFIX << 8) | CORE_EXIT, env);
index 401aa6f3690d634ecfd6215534a29a92bde5c6ec..249d9f85f6abd4e19775668b3585d5fd64002aab 100644 (file)
 #define CORE_REST 0x08
 #define CORE_REST_ARGS 2
 #define CORE_REST_STR "rest"
-
-#define CORE_APPLYN 0x0f
+#define CORE_UNQUOTE 0x09
+#define CORE_UNQUOTE_ARGS 1
+#define CORE_UNQUOTE_STR "unquote"
+#define CORE_APPLYN 0x0a
 #define CORE_APPLYN_ARGS 3
 #define CORE_APPLYN_STR "applyn"