From bfed3eb8b3c8cf5e0fb1e56b8b6307f3ffa8261f Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sun, 10 Jul 2016 12:52:53 +0200 Subject: [PATCH] add +,/,*,=. --- GNUmakefile | 9 ++++++++- mes.c | 48 +++++++++++++++++++++++++++++++++--------------- test.mes | 10 ++++++++++ 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index 286cdc42..67150c3d 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -16,7 +16,14 @@ mes.h: mes.c GNUmakefile while read f; do\ fun=$$(echo $$f | sed -e 's,^scm [*],,' -e 's,{.*,,');\ name=$$(echo $$fun | sed -e 's,^scm [\*],,' | grep -o '^[^ ]*');\ - scm_name=$$(echo $$name | sed -e 's,_p$$,?,' -e 's,_x$$,!,' -e 's,^builtin_,,' -re 's,(.*)_$$,c:\1,' | sed -e 's,^less?$$,<,' -e 's,^minus$$,-,' -e 's,_,-,g');\ + scm_name=$$(echo $$name | sed -e 's,_p$$,?,' -e 's,_x$$,!,' -e 's,^builtin_,,' -re 's,(.*)_$$,c:\1,' | sed \ + -e 's,^divide$$,/,'\ + -e 's,^is?$$,=,'\ + -e 's,^less?$$,<,'\ + -e 's,^minus$$,-,'\ + -e 's,^multiply$$,*,'\ + -e 's,^plus$$,+,'\ + -e 's,_,-,g');\ args=$$(echo $$fun | grep -o 'scm [\*]' | wc -l);\ echo "scm *$$fun;";\ echo "scm scm_$$name = {FUNCTION$$args, .name=\"$$scm_name\", .function$$args=&$$name};";\ diff --git a/mes.c b/mes.c index 68f2bd37..58b0f425 100644 --- a/mes.c +++ b/mes.c @@ -715,23 +715,41 @@ less_p (scm *a, scm *b) scm * minus (scm *a, scm *b) { -#if DEBUG - printf ("\nminus a="); - display (a); - printf (" b="); - display (b); - puts (""); -#endif assert (a->type == NUMBER); assert (b->type == NUMBER); - //return make_number (a->value - b->value); - scm *r = make_number (a->value - b->value); -#if DEBUG - printf (" ==> "); - display (r); - puts (""); -#endif - return r; + return make_number (a->value - b->value); +} + +scm * +plus (scm *a, scm *b) +{ + assert (a->type == NUMBER); + assert (b->type == NUMBER); + return make_number (a->value + b->value); +} + +scm * +divide (scm *a, scm *b) +{ + assert (a->type == NUMBER); + assert (b->type == NUMBER); + return make_number (a->value / b->value); +} + +scm * +multiply (scm *a, scm *b) +{ + assert (a->type == NUMBER); + assert (b->type == NUMBER); + return make_number (a->value * b->value); +} + +scm * +is_p (scm *a, scm *b) +{ + assert (a->type == NUMBER); + assert (b->type == NUMBER); + return a->value == b->value ? &scm_t : &scm_f; } #if QUASIQUOTE diff --git a/test.mes b/test.mes index 536283e4..619f25a0 100644 --- a/test.mes +++ b/test.mes @@ -114,4 +114,14 @@ (display 'a=1:) (display a) (newline) + +(display (+ 11 12)) +(newline) +(display (* 3 3)) +(newline) +(display (/ 9 3)) +(newline) +(display (= 3 '3)) +(newline) + '()