1 /* -*-comment-start: "//";comment-end:""-*-
2 * Mes --- Maxwell Equations of Software
3 * Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
5 * This file is part of Mes.
7 * Mes is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or (at
10 * your option) any later version.
12 * Mes is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Mes. If not, see <http://www.gnu.org/licenses/>.
22 greater_p (scm *x) ///((name . ">") (arity . n))
27 assert (x->car->type == NUMBER);
28 if (x->car->value >= n) return &scm_f;
36 less_p (scm *x) ///((name . "<") (arity . n))
41 assert (x->car->type == NUMBER);
42 if (x->car->value <= n) return &scm_f;
50 is_p (scm *x) ///((name . "=") (arity . n))
52 if (x == &scm_nil) return &scm_t;
53 assert (x->car->type == NUMBER);
54 int n = x->car->value;
58 if (x->car->value != n) return &scm_f;
65 minus (scm *x) ///((name . "-") (arity . n))
68 assert (a->type == NUMBER);
75 assert (x->car->type == NUMBER);
79 return make_number (n);
83 plus (scm *x) ///((name . "+") (arity . n))
88 assert (x->car->type == NUMBER);
92 return make_number (n);
96 divide (scm *x) ///((name . "/") (arity . n))
100 assert (x->car->type == NUMBER);
104 while (x != &scm_nil)
106 assert (x->car->type == NUMBER);
110 return make_number (n);
114 modulo (scm *a, scm *b)
116 assert (a->type == NUMBER);
117 assert (b->type == NUMBER);
118 return make_number (a->value % b->value);
122 multiply (scm *x) ///((name . "*") (arity . n))
125 while (x != &scm_nil)
127 assert (x->car->type == NUMBER);
131 return make_number (n);
135 logior (scm *x) ///((arity . n))
138 while (x != &scm_nil)
140 assert (x->car->type == NUMBER);
144 return make_number (n);