1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#| rep.lang.math bootstrap
$Id: math.jl,v 1.2 2000/07/31 13:43:03 john Exp $
Copyright (C) 2000 John Harper <john@dcs.warwick.ac.uk>
This file is part of librep.
librep is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
librep is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with librep; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|#
(declare (in-module rep.lang.math))
(open-structures '(rep.lang.symbols
rep.data))
;; numeric functions
(defun realp (x)
"Return t if X is a real number."
(numberp x))
(defun rationalp (x)
"Return t if X is a (possibly inexact) rational number."
(numberp x))
(defun inexactp (x)
"Return t if X is an inexact number."
(and (numberp x) (not (exactp x))))
(defun positivep (x)
"Return t if X is greater than zero."
(> x 0))
(defun negativep (x)
"Return t if X is less than zero."
(< x 0))
(defun oddp (x)
"Return t if X is odd, i.e. (/= (mod X 2) 0)."
(not (zerop (mod x 2))))
(defun evenp (x)
"Return t if X is odd, i.e. (= (mod X 2) 0)."
(zerop (mod x 2)))
(defun abs (x)
"Return the absolute value of X, i.e. (max X (- X))."
(max x (- x)))
(defun lcm args
"Return the least common multiple of integers A and B."
(if (null args)
1
(quotient (apply * (mapcar abs args)) (apply gcd args))))
(%define % remainder)
(%define modulo mod)
(%define lsh ash)
;; exports
(export-bindings '(realp rationalp inexactp positivep negativep
oddp evenp abs lcm % modulo lsh))
|