int n = INT_MAX;
while (x != cell_nil)
{
- assert (g_cells[car (x)].type == NUMBER);
- if (value (car (x)) >= n) return cell_f;
- n = value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ if (VALUE (car (x)) >= n) return cell_f;
+ n = VALUE (car (x));
x = cdr (x);
}
return cell_t;
int n = INT_MIN;
while (x != cell_nil)
{
- assert (g_cells[car (x)].type == NUMBER);
- if (value (car (x)) <= n) return cell_f;
- n = value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ if (VALUE (car (x)) <= n) return cell_f;
+ n = VALUE (car (x));
x = cdr (x);
}
return cell_t;
is_p (SCM x) ///((name . "=") (arity . n))
{
if (x == cell_nil) return cell_t;
- assert (g_cells[car (x)].type == NUMBER);
- int n = value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ int n = VALUE (car (x));
x = cdr (x);
while (x != cell_nil)
{
- if (value (car (x)) != n) return cell_f;
+ if (VALUE (car (x)) != n) return cell_f;
x = cdr (x);
}
return cell_t;
minus (SCM x) ///((name . "-") (arity . n))
{
SCM a = car (x);
- assert (g_cells[a].type == NUMBER);
- int n = value (a);
+ assert (TYPE (a) == NUMBER);
+ int n = VALUE (a);
x = cdr (x);
if (x == cell_nil)
n = -n;
while (x != cell_nil)
{
- assert (g_cells[car (x)].type == NUMBER);
- n -= value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ n -= VALUE (car (x));
x = cdr (x);
}
- return make_number (n);
+ return MAKE_NUMBER (n);
}
SCM
int n = 0;
while (x != cell_nil)
{
- assert (g_cells[car (x)].type == NUMBER);
- n += value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ n += VALUE (car (x));
x = cdr (x);
}
- return make_number (n);
+ return MAKE_NUMBER (n);
}
SCM
{
int n = 1;
if (x != cell_nil) {
- assert (g_cells[car (x)].type == NUMBER);
- n = value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ n = VALUE (car (x));
x = cdr (x);
}
while (x != cell_nil)
{
- assert (g_cells[car (x)].type == NUMBER);
- n /= value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ n /= VALUE (car (x));
x = cdr (x);
}
- return make_number (n);
+ return MAKE_NUMBER (n);
}
SCM
modulo (SCM a, SCM b)
{
- assert (g_cells[a].type == NUMBER);
- assert (g_cells[b].type == NUMBER);
- return make_number (value (a) % value (b));
+ assert (TYPE (a) == NUMBER);
+ assert (TYPE (b) == NUMBER);
+ return MAKE_NUMBER (VALUE (a) % VALUE (b));
}
SCM
int n = 1;
while (x != cell_nil)
{
- assert (g_cells[car (x)].type == NUMBER);
- n *= value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ n *= VALUE (car (x));
x = cdr (x);
}
- return make_number (n);
+ return MAKE_NUMBER (n);
}
SCM
int n = 0;
while (x != cell_nil)
{
- assert (g_cells[car (x)].type == NUMBER);
- n |= value (car (x));
+ assert (TYPE (car (x)) == NUMBER);
+ n |= VALUE (car (x));
x = cdr (x);
}
- return make_number (n);
+ return MAKE_NUMBER (n);
+}
+
+SCM
+ash (SCM n, SCM count)
+{
+ assert (TYPE (n) == NUMBER);
+ assert (TYPE (count) == NUMBER);
+ int cn = VALUE (n);
+ int ccount = VALUE (count);
+ return MAKE_NUMBER ((ccount < 0) ? cn >> -ccount : cn << ccount);
}