tisp

tiny lisp
git clone git://edryd.org/tisp
Log | Files | Refs | LICENSE

commit b64410a8040cbcb1236a0157d4a12cd100ecaf92
parent 62799933ed51e10c84d6dbc2ee5e541f1fbf35ca
Author: Ed van Bruggen <edvb@uw.edu>
Date:   Sun, 12 May 2019 16:10:49 -0700

Rename pow to ^

Diffstat:
tibs/lib.tsp | 2+-
tibs/math.c | 35+++++++++++++++++------------------
2 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/tibs/lib.tsp b/tibs/lib.tsp @@ -112,7 +112,7 @@ (define e (exp 1.)) (define (sqr x) (* x x)) -(define (root b p) (pow b (/ 1 p))) +(define (root b p) (^ b (/ 1 p))) (define (sqrt x) (root x 2)) (define (cbrt x) (root x 3)) (define (logb b x) (/ (log x) (log b))) diff --git a/tibs/math.c b/tibs/math.c @@ -170,6 +170,22 @@ prim_mod(Env env, Val args) return mk_int((int)num(a) % abs((int)num(b))); } +static Val +prim_pow(Env env, Val args) +{ + double bnum, bden; + Val b, p; + tsp_arg_num(args, "pow", 2); + EVAL_CHECK(b, car(args), "pow", EXPRESSION); + EVAL_CHECK(p, car(cdr(args)), "pow", EXPRESSION); + bnum = pow(num(b), num(p)/den(p)); + bden = pow(den(b), num(p)/den(p)); + if (bnum == (int)bnum && bden == (int)bden && + b->t & NUMBER && p->t & NUMBER) + return mk_num(b->t, p->t, 0)(bnum, bden); + return mk_pair(mk_sym(env, "pow"), mk_pair(b, mk_pair(p, env->nil))); +} + #define PRIM_COMPARE(NAME, OP) \ static Val \ prim_##NAME(Env env, Val args) \ @@ -189,22 +205,6 @@ PRIM_COMPARE(gt, >) PRIM_COMPARE(lte, <=) PRIM_COMPARE(gte, >=) -static Val -prim_pow(Env env, Val args) -{ - double bnum, bden; - Val b, p; - tsp_arg_num(args, "pow", 2); - EVAL_CHECK(b, car(args), "pow", EXPRESSION); - EVAL_CHECK(p, car(cdr(args)), "pow", EXPRESSION); - bnum = pow(num(b), num(p)/den(p)); - bden = pow(den(b), num(p)/den(p)); - if (bnum == (int)bnum && bden == (int)bden && - b->t & NUMBER && p->t & NUMBER) - return mk_num(b->t, p->t, 0)(bnum, bden); - return mk_pair(mk_sym(env, "pow"), mk_pair(b, mk_pair(p, env->nil))); -} - #define PRIM_TRIG(NAME) \ static Val \ prim_##NAME(Env env, Val args) \ @@ -245,14 +245,13 @@ tib_env_math(Env env) tsp_env_name_fn(*, mul); tsp_env_name_fn(/, div); tsp_env_fn(mod); + tsp_env_name_fn(^, pow); tsp_env_name_fn(<, lt); tsp_env_name_fn(>, gt); tsp_env_name_fn(<=, lte); tsp_env_name_fn(>=, gte); - tsp_env_fn(pow); - tsp_env_fn(sin); tsp_env_fn(cos); tsp_env_fn(tan);