aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/algebra/integer.spad.pamphlet2
-rw-r--r--src/algebra/sex.spad.pamphlet23
-rw-r--r--src/algebra/strap/INT.lsp13
-rw-r--r--src/algebra/syntax.spad.pamphlet4
-rw-r--r--src/interp/g-opt.boot6
5 files changed, 30 insertions, 18 deletions
diff --git a/src/algebra/integer.spad.pamphlet b/src/algebra/integer.spad.pamphlet
index ffcb0206..da23d678 100644
--- a/src/algebra/integer.spad.pamphlet
+++ b/src/algebra/integer.spad.pamphlet
@@ -145,7 +145,7 @@ Integer: Join(IntegerNumberSystem, ConvertibleTo String, OpenMath) with
inc x == x + 1
dec x == x - 1
hash x == %hash x
- negative? x == MINUSP(x)$Lisp
+ negative? x == x < 0
coerce(x):OutputForm == outputForm(x pretend Integer)
coerce(m:Integer):% == m pretend %
convert(x:%):Integer == x pretend Integer
diff --git a/src/algebra/sex.spad.pamphlet b/src/algebra/sex.spad.pamphlet
index bb5df1f5..2beef473 100644
--- a/src/algebra/sex.spad.pamphlet
+++ b/src/algebra/sex.spad.pamphlet
@@ -94,6 +94,13 @@ SExpressionOf(Str, Sym, Int, Flt, Expr): Decl == Body where
Decl ==> SExpressionCategory(Str, Sym, Int, Flt, Expr)
Body ==> add
+ import %integer?: % -> Boolean from Foreign Builtin
+ import %string?: % -> Boolean from Foreign Builtin
+ import %pair?: % -> Boolean from Foreign Builtin
+ import %peq: (%,%) -> Boolean from Foreign Builtin
+ import %head: % -> % from Foreign Builtin
+ import %tail: % -> % from Foreign Builtin
+
Rep := Expr
dotex:OutputForm := INTERN(".")$Lisp
@@ -112,20 +119,20 @@ SExpressionOf(Str, Sym, Int, Flt, Expr): Decl == Body where
paren blankSeparate l1
b1 = b2 == EQUAL(b1,b2)$Lisp
- eq(b1, b2) == %peq(b1,b2)$Foreign(Builtin)
+ eq(b1, b2) == %peq(b1,b2)
null? b == NULL(b)$Lisp
atom? b == ATOM(b)$Lisp
- pair? b == PAIRP(b)$Lisp
+ pair? b == %pair? b
- list? b == PAIRP(b)$Lisp or NULL(b)$Lisp
- string? b == STRINGP(b)$Lisp
+ list? b == pair? b or null? b
+ string? b == %string? b
symbol? b == IDENTP(b)$Lisp
- integer? b == INTP(b)$Lisp
+ integer? b == %integer? b
float? b == RNUMP(b)$Lisp
destruct b == (list? b => b pretend List %; error "Non-list")
- string b == (STRINGP(b)$Lisp=> b pretend Str;error "Non-string")
+ string b == (%string? b => b pretend Str; error "Non-string")
symbol b == (IDENTP(b)$Lisp => b pretend Sym;error "Non-symbol")
float b == (RNUMP(b)$Lisp => b pretend Flt;error "Non-float")
integer b == (INTP(b)$Lisp => b pretend Int;error "Non-integer")
@@ -138,8 +145,8 @@ SExpressionOf(Str, Sym, Int, Flt, Expr): Decl == Body where
convert(f: Flt) == f pretend %
convert(e: Expr) == e pretend %
- car b == CAR(b)$Lisp
- cdr b == CDR(b)$Lisp
+ car b == %head b
+ cdr b == %tail b
# b == LENGTH(b)$Lisp
elt(b:%, i:Integer) == destruct(b).i
elt(b:%, li:List Integer) ==
diff --git a/src/algebra/strap/INT.lsp b/src/algebra/strap/INT.lsp
index c294d8df..5c5fe790 100644
--- a/src/algebra/strap/INT.lsp
+++ b/src/algebra/strap/INT.lsp
@@ -56,8 +56,6 @@
(DECLAIM (FTYPE (FUNCTION (|%Integer| |%Shell|) |%Boolean|)
|INT;negative?;$B;15|))
-(PUT '|INT;negative?;$B;15| '|SPADreplace| 'MINUSP)
-
(DECLAIM (FTYPE (FUNCTION (|%Integer| |%Shell|) |%Thing|)
|INT;coerce;$Of;16|))
@@ -263,6 +261,9 @@
(PUT '|INT;dec;2$;13| '|SPADreplace| '(XLAM (|x|) (|%isub| |x| 1)))
+(PUT '|INT;negative?;$B;15| '|SPADreplace|
+ '(XLAM (|x|) (|%ilt| |x| 0)))
+
(PUT '|INT;unitCanonical;2$;55| '|SPADreplace| '|%iabs|)
(DEFUN |INT;writeOMInt| (|dev| |x| $)
@@ -372,8 +373,10 @@
(PROG (|r|)
(RETURN
(COND
- ((MINUSP (LETT |r| (REMAINDER2 |a| |b|)
- |INT;positiveRemainder;3$;28|))
+ ((|INT;negative?;$B;15|
+ (LETT |r| (REMAINDER2 |a| |b|)
+ |INT;positiveRemainder;3$;28|)
+ $)
(COND ((MINUSP |b|) (- |r| |b|)) ('T (+ |r| |b|))))
('T |r|)))))
@@ -498,7 +501,7 @@
(DEFUN |Integer| ()
(DECLARE (SPECIAL |$ConstructorCache|))
- (PROG (#0=#:G1527)
+ (PROG (#0=#:G1528)
(RETURN
(COND
((SETQ #0# (HGET |$ConstructorCache| '|Integer|))
diff --git a/src/algebra/syntax.spad.pamphlet b/src/algebra/syntax.spad.pamphlet
index a8d6c7a3..9856a21d 100644
--- a/src/algebra/syntax.spad.pamphlet
+++ b/src/algebra/syntax.spad.pamphlet
@@ -625,6 +625,8 @@ ParameterAst(): Public == Private where
++ object \spad{x} to \spadtype{String}. This function
++ is left at the discretion of the compiler.
Private == add
+ import %string?: % -> Boolean from Foreign Builtin
+
x case Identifier ==
SYMBOLP(x)$Foreign(Builtin)
@@ -632,7 +634,7 @@ ParameterAst(): Public == Private where
x : Identifier
x case String ==
- STRINGP(x)$Foreign(Builtin)
+ %string? x
autoCoerce(x: %): String ==
x : String
diff --git a/src/interp/g-opt.boot b/src/interp/g-opt.boot
index 1c8964f6..7e4b8443 100644
--- a/src/interp/g-opt.boot
+++ b/src/interp/g-opt.boot
@@ -474,9 +474,9 @@ optLESSP u ==
$VMsideEffectFreeOperators ==
'(CAR CDR LENGTH SIZE EQUAL EQL EQ NOT NULL OR AND
SPADfirst QVELT _+ _- _* _< _= _<_= _> _>_= ASH INTEGER_-LENGTH
- QEQCAR QCDR QCAR INTEGERP FLOATP STRINGP IDENTP SYMBOLP
- MINUSP GREATERP ZEROP ODDP FLOAT_-RADIX FLOAT FLOAT_-SIGN FLOAT_-DIGITS
- CGREATERP GGREATERP CHAR BOOLE GET BVEC_-GREATER %false %true
+ QEQCAR QCDR QCAR IDENTP SYMBOLP
+ MINUSP GREATERP ZEROP ODDP FLOAT_-RADIX FLOAT FLOAT_-SIGN
+ CGREATERP GGREATERP CHAR GET BVEC_-GREATER %false %true
%and %or %not %peq %ieq %ilt %ile %igt %ige %head %tail %integer?
%beq %blt %ble %bgt %bge %bitand %bitior %bitnot %bcompl
%imul %iadd %isub %igcd %ilcm %ipow %imin %imax %ieven? %iodd? %iinc