mescc: Output performance hacks: use core:display.
[mes.git] / src / math.c
index 9fe8b9c229daf98d09cc2d5a004ecdf80f608f53..1e9df4dac5119498e21bfdee95c5446a56dcaac3 100644 (file)
@@ -18,6 +18,8 @@
  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <limits.h>
+
 SCM
 greater_p (SCM x) ///((name . ">") (arity . n))
 {
@@ -133,6 +135,19 @@ multiply (SCM x) ///((name . "*") (arity . n))
   return MAKE_NUMBER (n);
 }
 
+SCM
+logand (SCM x) ///((arity . n))
+{
+  int n = 0;
+  while (x != cell_nil)
+    {
+      assert (TYPE (car (x)) == TNUMBER);
+      n &= VALUE (car (x));
+      x = cdr (x);
+    }
+  return MAKE_NUMBER (n);
+}
+
 SCM
 logior (SCM x) ///((arity . n))
 {
@@ -146,6 +161,14 @@ logior (SCM x) ///((arity . n))
   return MAKE_NUMBER (n);
 }
 
+SCM
+lognot (SCM x)
+{
+  assert (TYPE (x) == TNUMBER);
+  int n = ~VALUE (x);
+  return MAKE_NUMBER (n);
+}
+
 SCM
 ash (SCM n, SCM count)
 {