diff options
| author | Felix Perktold <Felix.Perktold@student.uibk.ac.at> | 2026-01-18 15:51:54 +0100 |
|---|---|---|
| committer | Felix Perktold <Felix.Perktold@student.uibk.ac.at> | 2026-01-18 15:51:54 +0100 |
| commit | a2ab90cfb9e364a3de7157b2ea2905e4c944583d (patch) | |
| tree | f0dc1ca808a0f0b570c028178d80ebf79ff16a03 | |
| parent | db3fdda53f16644181a6c68b3e9152af9b300066 (diff) | |
renamed builtins to procedures
| -rw-r--r-- | lisp.c | 40 | ||||
| -rw-r--r-- | lisp.h | 24 | ||||
| -rw-r--r-- | lisp/meta_cirular_eval.lisp | 2 | ||||
| -rw-r--r-- | lisp_api.h | 6 | ||||
| -rw-r--r-- | main.c | 26 | ||||
| -rw-r--r-- | modules/test_module.c | 2 | ||||
| -rw-r--r-- | test.c | 34 |
7 files changed, 67 insertions, 67 deletions
@@ -55,10 +55,10 @@ value *make_lambda(env *e, value *params, value *body) { return l; } -value *make_builtin(value *(*fn) (env *, value *)){ +value *make_procedure(value *(*fn) (env *, value *)){ value *val = malloc(sizeof(value)); - val->type = VT_BUILTIN; - val->as.builtin.fn = fn; + val->type = VT_PROCEDURE; + val->as.procedure.fn = fn; return val; } @@ -155,8 +155,8 @@ void print_value(value *val){ printf(")"); break; - case VT_BUILTIN: - printf("<builtin>\n"); + case VT_PROCEDURE: + printf("<procedure>\n"); break; default: printf("<unknown>\n"); @@ -280,8 +280,8 @@ value *eval_pair(env *e, value *v) { } value *head_eval = eval(e, head); - if (head_eval->type == VT_BUILTIN) { - return head_eval->as.builtin.fn(e, tail); + if (head_eval->type == VT_PROCEDURE) { + return head_eval->as.procedure.fn(e, tail); } if (head_eval->type == VT_LAMBDA) { @@ -334,24 +334,24 @@ value *apply(value *lval, value *args) { return make_lambda(sub_env, params, lval->as.lambda.body); } -value *builtin_cons(env *e, value *args) { +value *procedure_cons(env *e, value *args) { value *v = eval(e, car(args)); return cons(v, eval(e, car(cdr(args)))); } -value *builtin_car(env *e, value *args) { +value *procedure_car(env *e, value *args) { return car(eval(e, car(args))); } -value *builtin_cdr(env *e, value *args) { +value *procedure_cdr(env *e, value *args) { return cdr(eval(e, car(args))); } -value *builtin_reverse(env *e, value *args) { +value *procedure_reverse(env *e, value *args) { return reverse(eval(e, car(args))); } -value *builtin_isnull(env *e, value *args) { +value *procedure_isnull(env *e, value *args) { value *v = eval(e, car(args)); if(v->type == VT_NIL) { return make_int(1); @@ -376,14 +376,14 @@ int value_eq(value *a, value *b) { return value_eq(car(a), car(b)) && value_eq(cdr(a), cdr(b)); case VT_LAMBDA: - case VT_BUILTIN: + case VT_PROCEDURE: default: return 0; } return 1; } -value *builtin_equal(env *e, value *args) { +value *procedure_equal(env *e, value *args) { value *v_prev = eval(e, car(args)); args = cdr(args); @@ -434,26 +434,26 @@ value *apply_to_nums(env *e, value *args, double (*fn)(double, double)) { } double add_fn(double x, double y) { return x+y; } -value *builtin_add(env *e, value *args) { +value *procedure_add(env *e, value *args) { return apply_to_nums(e, args, add_fn); } double sub_fn(double x, double y) { return x-y; } -value *builtin_sub(env *e, value *args) { +value *procedure_sub(env *e, value *args) { return apply_to_nums(e, args, sub_fn); } double mul_fn(double x, double y) { return x*y; } -value *builtin_mul(env *e, value *args) { +value *procedure_mul(env *e, value *args) { return apply_to_nums(e, args, mul_fn); } double div_fn(double x, double y) { return x/y; } -value *builtin_div(env *e, value *args) { +value *procedure_div(env *e, value *args) { return apply_to_nums(e, args, div_fn); } -value *builtin_lt(env *e, value *args) { +value *procedure_lt(env *e, value *args) { double prev_num; value *v = eval(e, car(args)); @@ -489,7 +489,7 @@ value *builtin_lt(env *e, value *args) { return make_int(1); } -value *builtin_load_module(env *e, value *args) { +value *procedure_load_module(env *e, value *args) { value *fst_arg = eval(e, car(args)); if (fst_arg->type != VT_STRING) { @@ -26,18 +26,18 @@ value *eval_pair(env *e, value *val); value *apply(value *lambda, value *args); -value *builtin_cons(env *e, value *args); -value *builtin_car(env *e, value *args); -value *builtin_cdr(env *e, value *args); -value *builtin_reverse(env *e, value *args); -value *builtin_isnull(env *e, value *args); -value *builtin_equal(env *e, value *args); -value *builtin_add(env *e, value *args); -value *builtin_sub(env *e, value *args); -value *builtin_mul(env *e, value *args); -value *builtin_div(env *e, value *args); -value *builtin_lt(env *e, value *args); -value *builtin_load_module(env *e, value *args); +value *procedure_cons(env *e, value *args); +value *procedure_car(env *e, value *args); +value *procedure_cdr(env *e, value *args); +value *procedure_reverse(env *e, value *args); +value *procedure_isnull(env *e, value *args); +value *procedure_equal(env *e, value *args); +value *procedure_add(env *e, value *args); +value *procedure_sub(env *e, value *args); +value *procedure_mul(env *e, value *args); +value *procedure_div(env *e, value *args); +value *procedure_lt(env *e, value *args); +value *procedure_load_module(env *e, value *args); int is_integer(double x); diff --git a/lisp/meta_cirular_eval.lisp b/lisp/meta_cirular_eval.lisp index 60b7bf8..d58bcdd 100644 --- a/lisp/meta_cirular_eval.lisp +++ b/lisp/meta_cirular_eval.lisp @@ -54,7 +54,7 @@ ; apply (define (apply proc args) (cond - ((procedure? proc) (apply proc args)) ; builtin + ((procedure? proc) (apply proc args)) ; procedure ((and (pair? proc) (eq? (car proc) 'closure)) (let ((params (cadr proc)) (body (caddr proc)) @@ -12,7 +12,7 @@ typedef enum { VT_NIL, VT_PAIR, VT_LAMBDA, - VT_BUILTIN + VT_PROCEDURE } val_type; struct value { @@ -33,7 +33,7 @@ struct value { } lambda; struct { value *(*fn) (env *, value *); - } builtin; + } procedure; } as; }; @@ -43,7 +43,7 @@ value *make_symbol(const char *sym); value *make_string(const char *str); value *make_nil(); value *make_lambda(env *e, value *params, value *body); -value *make_builtin(value *(*fn) (env *, value *)); +value *make_procedure(value *(*fn) (env *, value *)); value *cons(value *car, value *cdr); value *car(value *cons); value *cdr(value *cons); @@ -94,19 +94,19 @@ void init_readline() { int main(int argc, char **argv) { // init global env global_env = env_create(NULL); - env_define(global_env, "cons", make_builtin(builtin_cons)); - env_define(global_env, "car", make_builtin(builtin_car)); - env_define(global_env, "cdr", make_builtin(builtin_cdr)); - env_define(global_env, "reverse", make_builtin(builtin_reverse)); - env_define(global_env, "null?", make_builtin(builtin_isnull)); - env_define(global_env, "equal?", make_builtin(builtin_equal)); - env_define(global_env, "+", make_builtin(builtin_add)); - env_define(global_env, "-", make_builtin(builtin_sub)); - env_define(global_env, "*", make_builtin(builtin_mul)); - env_define(global_env, "/", make_builtin(builtin_div)); - env_define(global_env, "<", make_builtin(builtin_lt)); - - env_define(global_env, "load_module", make_builtin(builtin_load_module)); + env_define(global_env, "cons", make_procedure(procedure_cons)); + env_define(global_env, "car", make_procedure(procedure_car)); + env_define(global_env, "cdr", make_procedure(procedure_cdr)); + env_define(global_env, "reverse", make_procedure(procedure_reverse)); + env_define(global_env, "null?", make_procedure(procedure_isnull)); + env_define(global_env, "equal?", make_procedure(procedure_equal)); + env_define(global_env, "+", make_procedure(procedure_add)); + env_define(global_env, "-", make_procedure(procedure_sub)); + env_define(global_env, "*", make_procedure(procedure_mul)); + env_define(global_env, "/", make_procedure(procedure_div)); + env_define(global_env, "<", make_procedure(procedure_lt)); + + env_define(global_env, "load_module", make_procedure(procedure_load_module)); // evaluate files for(int i = 1; i < argc; i++) { diff --git a/modules/test_module.c b/modules/test_module.c index ead7b91..f43a6d1 100644 --- a/modules/test_module.c +++ b/modules/test_module.c @@ -10,7 +10,7 @@ module_export *module_init() { static module_export exports[2]; exports[0].name = "hello"; - exports[0].v = make_builtin(&hello_fun); + exports[0].v = make_procedure(&hello_fun); exports[1].name = NULL; exports[1].v = NULL; @@ -120,7 +120,7 @@ void test_lambda_add() { env *e = env_create(NULL); // install + - env_define(e, "+", make_builtin(builtin_add)); + env_define(e, "+", make_procedure(procedure_add)); value *expr = cons( @@ -148,7 +148,7 @@ void test_lambda_add() { void test_lambda_multiple_args() { env *e = env_create(NULL); - env_define(e, "+", make_builtin(builtin_add)); + env_define(e, "+", make_procedure(procedure_add)); value *expr = cons( @@ -184,7 +184,7 @@ void test_lambda_closure() { //((lambda (y) (+ x y)) 5) env *e = env_create(NULL); - env_define(e, "+", make_builtin(builtin_add)); + env_define(e, "+", make_procedure(procedure_add)); env_define(e, "x", make_int(10)); value *expr = @@ -213,7 +213,7 @@ void test_lambda_closure() { void test_nested_lambdas() { // (((lambda (x) (lambda (y) (+ x y))) 3) 4) env *e = env_create(NULL); - env_define(e, "+", make_builtin(builtin_add)); + env_define(e, "+", make_procedure(procedure_add)); value *expr = cons( @@ -274,10 +274,10 @@ void test_lambda_does_not_modify_outer_env() { void test_recursive_factorial() { env *e = env_create(NULL); - env_define(e, "+", make_builtin(builtin_add)); - env_define(e, "-", make_builtin(builtin_sub)); - env_define(e, "*", make_builtin(builtin_mul)); - env_define(e, "<", make_builtin(builtin_lt)); + env_define(e, "+", make_procedure(procedure_add)); + env_define(e, "-", make_procedure(procedure_sub)); + env_define(e, "*", make_procedure(procedure_mul)); + env_define(e, "<", make_procedure(procedure_lt)); /* (define fact @@ -349,7 +349,7 @@ void test_recursive_factorial() { void test_eq_ints() { env *e = env_create(NULL); - env_define(e, "eq", make_builtin(builtin_equal)); + env_define(e, "eq", make_procedure(procedure_equal)); value *expr = cons(make_symbol("eq"), @@ -366,7 +366,7 @@ void test_eq_ints() { void test_eq_ints_false() { env *e = env_create(NULL); - env_define(e, "eq", make_builtin(builtin_equal)); + env_define(e, "eq", make_procedure(procedure_equal)); value *expr = cons(make_symbol("eq"), @@ -381,7 +381,7 @@ void test_eq_ints_false() { void test_eq_symbols() { env *e = env_create(NULL); - env_define(e, "eq", make_builtin(builtin_equal)); + env_define(e, "eq", make_procedure(procedure_equal)); value *expr = cons(make_symbol("eq"), @@ -396,7 +396,7 @@ void test_eq_symbols() { void test_eq_lists() { env *e = env_create(NULL); - env_define(e, "eq", make_builtin(builtin_equal)); + env_define(e, "eq", make_procedure(procedure_equal)); value *list1 = cons(make_int(1), @@ -421,7 +421,7 @@ void test_eq_lists() { void test_null_true() { env *e = env_create(NULL); - env_define(e, "null?", make_builtin(builtin_isnull)); + env_define(e, "null?", make_procedure(procedure_isnull)); value *expr = cons(make_symbol("null?"), @@ -434,7 +434,7 @@ void test_null_true() { void test_null_false() { env *e = env_create(NULL); - env_define(e, "null?", make_builtin(builtin_isnull)); + env_define(e, "null?", make_procedure(procedure_isnull)); value *expr = cons(make_symbol("null?"), @@ -450,7 +450,7 @@ void test_null_false() { void test_if_true() { env *e = env_create(NULL); - env_define(e, "<", make_builtin(builtin_lt)); + env_define(e, "<", make_procedure(procedure_lt)); value *expr = cons(make_symbol("if"), @@ -503,7 +503,7 @@ void test_if_short_circuit() { void test_add_multiple_args() { env *e = env_create(NULL); - env_define(e, "+", make_builtin(builtin_add)); + env_define(e, "+", make_procedure(procedure_add)); value *expr = cons(make_symbol("+"), @@ -520,7 +520,7 @@ void test_add_multiple_args() { void test_lt_chain() { env *e = env_create(NULL); - env_define(e, "<", make_builtin(builtin_lt)); + env_define(e, "<", make_procedure(procedure_lt)); value *expr = cons(make_symbol("<"), |
