From 7b5892f75a75363a656ede8befb419245aa218b5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 24 Dec 2017 14:28:29 -0800 Subject: [PATCH] altos/scheme: Add separate floor-quotient builtin Does what 'quotient' did before, now quotient rounds towards zero while floor-quotient rounds down. Signed-off-by: Keith Packard --- src/scheme/ao_scheme_builtin.c | 12 ++++++++++++ src/scheme/ao_scheme_builtin.txt | 1 + 2 files changed, 13 insertions(+) diff --git a/src/scheme/ao_scheme_builtin.c b/src/scheme/ao_scheme_builtin.c index 81fd9010..e2532c98 100644 --- a/src/scheme/ao_scheme_builtin.c +++ b/src/scheme/ao_scheme_builtin.c @@ -393,6 +393,11 @@ ao_scheme_math(struct ao_scheme_cons *orig_cons, enum ao_scheme_builtin_id op) case builtin_quotient: if (c == 0) return ao_scheme_error(AO_SCHEME_DIVIDE_BY_ZERO, "quotient by zero"); + r = r / c; + break; + case builtin_floor_quotient: + if (c == 0) + return ao_scheme_error(AO_SCHEME_DIVIDE_BY_ZERO, "floor-quotient by zero"); if (r % c != 0 && (c < 0) != (r < 0)) r = r / c - 1; else @@ -436,6 +441,7 @@ ao_scheme_math(struct ao_scheme_cons *orig_cons, enum ao_scheme_builtin_id op) r /= c; break; case builtin_quotient: + case builtin_floor_quotient: case builtin_remainder: case builtin_modulo: return ao_scheme_error(AO_SCHEME_INVALID, "non-integer value in integer divide"); @@ -491,6 +497,12 @@ ao_scheme_do_quotient(struct ao_scheme_cons *cons) return ao_scheme_math(cons, builtin_quotient); } +ao_poly +ao_scheme_do_floor_quotient(struct ao_scheme_cons *cons) +{ + return ao_scheme_math(cons, builtin_floor_quotient); +} + ao_poly ao_scheme_do_modulo(struct ao_scheme_cons *cons) { diff --git a/src/scheme/ao_scheme_builtin.txt b/src/scheme/ao_scheme_builtin.txt index 23adf6ed..bdadbd6a 100644 --- a/src/scheme/ao_scheme_builtin.txt +++ b/src/scheme/ao_scheme_builtin.txt @@ -31,6 +31,7 @@ all f_lambda divide / all f_lambda modulo modulo % all f_lambda remainder all f_lambda quotient +all f_lambda floor_quotient floor-quotient all f_lambda equal = eq? eqv? all f_lambda less < string string>? -- 2.30.2