diff --git a/changelog b/changelog index 0a7fe92..dd95712 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,9 @@ -20082016 wxh src/interp/i-intern.boot use hashtable to speedup compiles -20082016 wxh src/interp/g-util.boot use hashtable to speedup compiles -20082016 wxh src/interp/compiler.boot use hashtable to speedup compiles -20082016 wxh src/interp/category.boot use hashtable to speedup compiles +20080217 tpd src/algebra/string.spad add function examples +20080217 tpd src/algebra/curve.spad add function examples +20080216 wxh src/interp/i-intern.boot use hashtable to speedup compiles +20080216 wxh src/interp/g-util.boot use hashtable to speedup compiles +20080216 wxh src/interp/compiler.boot use hashtable to speedup compiles +20080216 wxh src/interp/category.boot use hashtable to speedup compiles 20080215 tpd src/interp/format.boot add )d op documentation 20080215 tpd src/algebra/plot add comment documentation 20080210 tpd src/algebra/Makefile add plot help and input files for plot diff --git a/src/algebra/curve.spad.pamphlet b/src/algebra/curve.spad.pamphlet index 5ca9495..6128b6b 100644 --- a/src/algebra/curve.spad.pamphlet +++ b/src/algebra/curve.spad.pamphlet @@ -36,14 +36,43 @@ FunctionFieldCategory(F, UP, UPUP): Category == Definition where numberOfComponents : () -> NonNegativeInteger ++ numberOfComponents() returns the number of absolutely irreducible ++ components. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E numberOfComponents()$R genus : () -> NonNegativeInteger ++ genus() returns the genus of one absolutely irreducible component + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E genus()$R absolutelyIrreducible? : () -> Boolean ++ absolutelyIrreducible?() tests if the curve absolutely irreducible? + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R2 := RadicalFunctionField(INT, P0, P1, 2 * x**2, 4) + ++E absolutelyIrreducible?()$R2 rationalPoint? : (F, F) -> Boolean ++ rationalPoint?(a, b) tests if \spad{(x=a,y=b)} is on the curve. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E rationalPoint?(0,0)$R + ++E R2 := RadicalFunctionField(INT, P0, P1, 2 * x**2, 4) + ++E rationalPoint?(0,0)$R2 branchPointAtInfinity? : () -> Boolean ++ branchPointAtInfinity?() tests if there is a branch point at infinity. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E branchPointAtInfinity?()$R + ++E R2 := RadicalFunctionField(INT, P0, P1, 2 * x**2, 4) + ++E branchPointAtInfinity?()$R branchPoint? : F -> Boolean ++ branchPoint?(a) tests whether \spad{x = a} is a branch point. branchPoint? : UP -> Boolean @@ -62,8 +91,18 @@ FunctionFieldCategory(F, UP, UPUP): Category == Definition where ++ ramified?(p) tests whether \spad{p(x) = 0} is ramified. integralBasis : () -> Vector $ ++ integralBasis() returns the integral basis for the curve. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E integralBasis()$R integralBasisAtInfinity: () -> Vector $ - ++ integralBasisAtInfinity() returns the local integral basis at infinity. + ++ integralBasisAtInfinity() returns the local integral basis at infinity + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E integralBasisAtInfinity()$R integralAtInfinity? : $ -> Boolean ++ integralAtInfinity?() tests if f is locally integral at infinity. integral? : $ -> Boolean @@ -81,21 +120,41 @@ FunctionFieldCategory(F, UP, UPUP): Category == Definition where ++ \spad{(w1,...,wn) = M (1, y, ..., y**(n-1))}, ++ where \spad{(w1,...,wn)} is the integral basis of ++ \spadfunFrom{integralBasis}{FunctionFieldCategory}. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E integralMatrix()$R inverseIntegralMatrix : () -> Matrix RF ++ inverseIntegralMatrix() returns M such that ++ \spad{M (w1,...,wn) = (1, y, ..., y**(n-1))} ++ where \spad{(w1,...,wn)} is the integral basis of ++ \spadfunFrom{integralBasis}{FunctionFieldCategory}. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E inverseIntegralMatrix()$R integralMatrixAtInfinity : () -> Matrix RF ++ integralMatrixAtInfinity() returns M such that ++ \spad{(v1,...,vn) = M (1, y, ..., y**(n-1))} ++ where \spad{(v1,...,vn)} is the local integral basis at infinity ++ returned by \spad{infIntBasis()}. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E integralMatrixAtInfinity()$R inverseIntegralMatrixAtInfinity: () -> Matrix RF ++ inverseIntegralMatrixAtInfinity() returns M such ++ that \spad{M (v1,...,vn) = (1, y, ..., y**(n-1))} ++ where \spad{(v1,...,vn)} is the local integral basis at infinity ++ returned by \spad{infIntBasis()}. + ++ + ++E P0 := UnivariatePolynomial(x, Integer) + ++E P1 := UnivariatePolynomial(y, Fraction P0) + ++E R := RadicalFunctionField(INT, P0, P1, 1 - x**20, 20) + ++E inverseIntegralMatrixAtInfinity()$R yCoordinates : $ -> Record(num:Vector(UP), den:UP) ++ yCoordinates(f) returns \spad{[[A1,...,An], D]} such that ++ \spad{f = (A1 + A2 y +...+ An y**(n-1)) / D}. @@ -120,7 +179,7 @@ FunctionFieldCategory(F, UP, UPUP): Category == Definition where integral? : ($, F) -> Boolean ++ integral?(f, a) tests whether f is locally integral at \spad{x = a}. integral? : ($, UP) -> Boolean - ++ integral?(f, p) tests whether f is locally integral at \spad{p(x) = 0}. + ++ integral?(f, p) tests whether f is locally integral at \spad{p(x) = 0} differentiate : ($, UP -> UP) -> $ ++ differentiate(x, d) extends the derivation d from UP to $ and ++ applies it to x. @@ -131,7 +190,8 @@ FunctionFieldCategory(F, UP, UPUP): Category == Definition where ++ primitivePart(f) removes the content of the denominator and ++ the common content of the numerator of f. elt : ($, F, F) -> F - ++ elt(f,a,b) or f(a, b) returns the value of f at the point \spad{(x = a, y = b)} + ++ elt(f,a,b) or f(a, b) returns the value of f + ++ at the point \spad{(x = a, y = b)} ++ if it is not singular. elliptic : () -> Union(UP, "failed") ++ elliptic() returns \spad{p(x)} if the curve is the elliptic diff --git a/src/algebra/string.spad.pamphlet b/src/algebra/string.spad.pamphlet index a7af939..9cae78b 100644 --- a/src/algebra/string.spad.pamphlet +++ b/src/algebra/string.spad.pamphlet @@ -228,98 +228,130 @@ o $AXIOM/doc/src/algebra/string.spad.dvi ++ This domain provides the basic character data type. Character: OrderedFinite() with - ord: % -> Integer - ++ ord(c) provides an integral code corresponding to the - ++ character c. It is always true that \spad{char ord c = c}. - char: Integer -> % - ++ char(i) provides a character corresponding to the integer - ++ code i. It is always true that \spad{ord char i = i}. - char: String -> % - ++ char(s) provides a character from a string s of length one. - space: () -> % - ++ space() provides the blank character. - quote: () -> % - ++ quote() provides the string quote character, \spad{"}. - escape: () -> % - ++ escape() provides the escape character, \spad{_}, which - ++ is used to allow quotes and other characters {\em within} - ++ strings. - upperCase: % -> % - ++ upperCase(c) converts a lower case letter to the corresponding - ++ upper case letter. If c is not a lower case letter, then - ++ it is returned unchanged. - lowerCase: % -> % - ++ lowerCase(c) converts an upper case letter to the corresponding - ++ lower case letter. If c is not an upper case letter, then - ++ it is returned unchanged. - digit?: % -> Boolean - ++ digit?(c) tests if c is a digit character, - ++ i.e. one of 0..9. - hexDigit?: % -> Boolean - ++ hexDigit?(c) tests if c is a hexadecimal numeral, - ++ i.e. one of 0..9, a..f or A..F. - alphabetic?: % -> Boolean - ++ alphabetic?(c) tests if c is a letter, - ++ i.e. one of a..z or A..Z. - upperCase?: % -> Boolean - ++ upperCase?(c) tests if c is an upper case letter, - ++ i.e. one of A..Z. - lowerCase?: % -> Boolean - ++ lowerCase?(c) tests if c is an lower case letter, - ++ i.e. one of a..z. - alphanumeric?: % -> Boolean - ++ alphanumeric?(c) tests if c is either a letter or number, - ++ i.e. one of 0..9, a..z or A..Z. - - == add - Rep := SingleInteger -- 0..255 - - CC ==> CharacterClass() - import CC - - --cl: Record(dig:CC,hex:CC,upp:CC,low:CC,alpha:CC,alnum:CC) := - -- [ digit(), hexDigit(), - -- upperCase(), lowerCase(), alphabetic(), alphanumeric() ] - - OutChars:PrimitiveArray(OutputForm) := - construct [NUM2CHAR(i)$Lisp for i in 0..255] - - minChar := minIndex OutChars - - a = b == a =$Rep b - a < b == a <$Rep b - size() == 256 - index n == char((n - 1)::Integer) - lookup c == (1 + ord c)::PositiveInteger - char(n:Integer) == n::% - ord c == convert(c)$Rep - random() == char(random()$Integer rem size()) - space == QENUM(" ", 0$Lisp)$Lisp - quote == QENUM("_" ", 0$Lisp)$Lisp - escape == QENUM("__ ", 0$Lisp)$Lisp - coerce(c:%):OutputForm == OutChars(minChar + ord c) - digit? c == member?(c pretend Character, digit()) - hexDigit? c == member?(c pretend Character, hexDigit()) - upperCase? c == member?(c pretend Character, upperCase()) - lowerCase? c == member?(c pretend Character, lowerCase()) - alphabetic? c == member?(c pretend Character, alphabetic()) - alphanumeric? c == member?(c pretend Character, alphanumeric()) - - latex c == - concat("\mbox{`", concat(new(1,c pretend Character)$String, "'}")$String)$String - - char(s:String) == --- one?(#s) => s(minIndex s) pretend % - (#s) = 1 => s(minIndex s) pretend % - error "String is not a single character" - - upperCase c == - QENUM(PNAME(UPCASE(NUM2CHAR(ord c)$Lisp)$Lisp)$Lisp, - 0$Lisp)$Lisp - - lowerCase c == - QENUM(PNAME(DOWNCASE(NUM2CHAR(ord c)$Lisp)$Lisp)$Lisp, - 0$Lisp)$Lisp + ord: % -> Integer + ++ ord(c) provides an integral code corresponding to the + ++ character c. It is always true that \spad{char ord c = c}. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [ord c for c in chars] + char: Integer -> % + ++ char(i) provides a character corresponding to the integer + ++ code i. It is always true that \spad{ord char i = i}. + ++ + ++E [char c for c in [97,65,88,56,43]] + char: String -> % + ++ char(s) provides a character from a string s of length one. + ++ + ++E [char c for c in ["a","A","X","8","+"]] + space: () -> % + ++ space() provides the blank character. + ++ + ++E space() + quote: () -> % + ++ quote() provides the string quote character, \spad{"}. + ++ + ++E quote() + escape: () -> % + ++ escape() provides the escape character, \spad{_}, which + ++ is used to allow quotes and other characters {\em within} + ++ strings. + ++ + ++E escape() + upperCase: % -> % + ++ upperCase(c) converts a lower case letter to the corresponding + ++ upper case letter. If c is not a lower case letter, then + ++ it is returned unchanged. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [upperCase c for c in chars] + lowerCase: % -> % + ++ lowerCase(c) converts an upper case letter to the corresponding + ++ lower case letter. If c is not an upper case letter, then + ++ it is returned unchanged. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [lowerCase c for c in chars] + digit?: % -> Boolean + ++ digit?(c) tests if c is a digit character, + ++ i.e. one of 0..9. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [digit? c for c in chars] + hexDigit?: % -> Boolean + ++ hexDigit?(c) tests if c is a hexadecimal numeral, + ++ i.e. one of 0..9, a..f or A..F. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [hexDigit? c for c in chars] + alphabetic?: % -> Boolean + ++ alphabetic?(c) tests if c is a letter, + ++ i.e. one of a..z or A..Z. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [alphabetic? c for c in chars] + upperCase?: % -> Boolean + ++ upperCase?(c) tests if c is an upper case letter, + ++ i.e. one of A..Z. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [upperCase? c for c in chars] + lowerCase?: % -> Boolean + ++ lowerCase?(c) tests if c is an lower case letter, + ++ i.e. one of a..z. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [lowerCase? c for c in chars] + alphanumeric?: % -> Boolean + ++ alphanumeric?(c) tests if c is either a letter or number, + ++ i.e. one of 0..9, a..z or A..Z. + ++ + ++E chars := [char "a", char "A", char "X", char "8", char "+"] + ++E [alphanumeric? c for c in chars] + + == add + + Rep := SingleInteger -- 0..255 + + CC ==> CharacterClass() + import CC + + OutChars:PrimitiveArray(OutputForm) := + construct [NUM2CHAR(i)$Lisp for i in 0..255] + + minChar := minIndex OutChars + + a = b == a =$Rep b + a < b == a <$Rep b + size() == 256 + index n == char((n - 1)::Integer) + lookup c == (1 + ord c)::PositiveInteger + char(n:Integer) == n::% + ord c == convert(c)$Rep + random() == char(random()$Integer rem size()) + space == QENUM(" ", 0$Lisp)$Lisp + quote == QENUM("_" ", 0$Lisp)$Lisp + escape == QENUM("__ ", 0$Lisp)$Lisp + coerce(c:%):OutputForm == OutChars(minChar + ord c) + digit? c == member?(c pretend Character, digit()) + hexDigit? c == member?(c pretend Character, hexDigit()) + upperCase? c == member?(c pretend Character, upperCase()) + lowerCase? c == member?(c pretend Character, lowerCase()) + alphabetic? c == member?(c pretend Character, alphabetic()) + alphanumeric? c == member?(c pretend Character, alphanumeric()) + + latex c == + concat("\mbox{`", concat(new(1,c pretend Character)$String, "'}")_ + $String)$String + + char(s:String) == + (#s) = 1 => s(minIndex s) pretend % + error "String is not a single character" + + upperCase c == + QENUM(PNAME(UPCASE(NUM2CHAR(ord c)$Lisp)$Lisp)$Lisp,0$Lisp)$Lisp + + lowerCase c == + QENUM(PNAME(DOWNCASE(NUM2CHAR(ord c)$Lisp)$Lisp)$Lisp,0$Lisp)$Lisp @ \section{CHAR.lsp BOOTSTRAP} @@ -351,7 +383,12 @@ Note that this code is not included in the generated catdef.spad file. (DEFUN |CHAR;index;Pi$;4| (|n| |$|) (SPADCALL (|-| |n| 1) (QREFELT |$| 18))) -(DEFUN |CHAR;lookup;$Pi;5| (|c| |$|) (PROG (#1=#:G90919) (RETURN (PROG1 (LETT #1# (|+| 1 (SPADCALL |c| (QREFELT |$| 21))) |CHAR;lookup;$Pi;5|) (|check-subtype| (|>| #1# 0) (QUOTE (|PositiveInteger|)) #1#))))) +(DEFUN |CHAR;lookup;$Pi;5| (|c| |$|) + (PROG (#1=#:G90919) + (RETURN + (PROG1 + (LETT #1# (|+| 1 (SPADCALL |c| (QREFELT |$| 21))) |CHAR;lookup;$Pi;5|) + (|check-subtype| (|>| #1# 0) (QUOTE (|PositiveInteger|)) #1#))))) (DEFUN |CHAR;char;I$;6| (|n| |$|) (SPADCALL |n| (QREFELT |$| 23))) @@ -359,47 +396,146 @@ Note that this code is not included in the generated catdef.spad file. (DEFUN |CHAR;ord;$I;7| (|c| |$|) |c|) -(DEFUN |CHAR;random;$;8| (|$|) (SPADCALL (REMAINDER2 (|random|) (SPADCALL (QREFELT |$| 16))) (QREFELT |$| 18))) +(DEFUN |CHAR;random;$;8| (|$|) + (SPADCALL (REMAINDER2 (|random|) (SPADCALL (QREFELT |$| 16))) + (QREFELT |$| 18))) -(PUT (QUOTE |CHAR;space;$;9|) (QUOTE |SPADreplace|) (QUOTE (XLAM NIL (QENUM " " 0)))) +(PUT (QUOTE |CHAR;space;$;9|) + (QUOTE |SPADreplace|) (QUOTE (XLAM NIL (QENUM " " 0)))) (DEFUN |CHAR;space;$;9| (|$|) (QENUM " " 0)) -(PUT (QUOTE |CHAR;quote;$;10|) (QUOTE |SPADreplace|) (QUOTE (XLAM NIL (QENUM "\" " 0)))) +(PUT (QUOTE |CHAR;quote;$;10|) + (QUOTE |SPADreplace|) (QUOTE (XLAM NIL (QENUM "\" " 0)))) (DEFUN |CHAR;quote;$;10| (|$|) (QENUM "\" " 0)) -(PUT (QUOTE |CHAR;escape;$;11|) (QUOTE |SPADreplace|) (QUOTE (XLAM NIL (QENUM "_ " 0)))) +(PUT (QUOTE |CHAR;escape;$;11|) + (QUOTE |SPADreplace|) (QUOTE (XLAM NIL (QENUM "_ " 0)))) (DEFUN |CHAR;escape;$;11| (|$|) (QENUM "_ " 0)) -(DEFUN |CHAR;coerce;$Of;12| (|c| |$|) (ELT (QREFELT |$| 10) (|+| (QREFELT |$| 11) (SPADCALL |c| (QREFELT |$| 21))))) - -(DEFUN |CHAR;digit?;$B;13| (|c| |$|) (SPADCALL |c| (|spadConstant| |$| 31) (QREFELT |$| 33))) - -(DEFUN |CHAR;hexDigit?;$B;14| (|c| |$|) (SPADCALL |c| (|spadConstant| |$| 35) (QREFELT |$| 33))) - -(DEFUN |CHAR;upperCase?;$B;15| (|c| |$|) (SPADCALL |c| (|spadConstant| |$| 37) (QREFELT |$| 33))) - -(DEFUN |CHAR;lowerCase?;$B;16| (|c| |$|) (SPADCALL |c| (|spadConstant| |$| 39) (QREFELT |$| 33))) - -(DEFUN |CHAR;alphabetic?;$B;17| (|c| |$|) (SPADCALL |c| (|spadConstant| |$| 41) (QREFELT |$| 33))) - -(DEFUN |CHAR;alphanumeric?;$B;18| (|c| |$|) (SPADCALL |c| (|spadConstant| |$| 43) (QREFELT |$| 33))) - -(DEFUN |CHAR;latex;$S;19| (|c| |$|) (STRCONC "\\mbox{`" (STRCONC (|MAKE-FULL-CVEC| 1 |c|) "'}"))) - -(DEFUN |CHAR;char;S$;20| (|s| |$|) (COND ((EQL (QCSIZE |s|) 1) (SPADCALL |s| (SPADCALL |s| (QREFELT |$| 47)) (QREFELT |$| 48))) ((QUOTE T) (|error| "String is not a single character")))) - -(DEFUN |CHAR;upperCase;2$;21| (|c| |$|) (QENUM (PNAME (UPCASE (NUM2CHAR (SPADCALL |c| (QREFELT |$| 21))))) 0)) - -(DEFUN |CHAR;lowerCase;2$;22| (|c| |$|) (QENUM (PNAME (DOWNCASE (NUM2CHAR (SPADCALL |c| (QREFELT |$| 21))))) 0)) - -(DEFUN |Character| NIL (PROG NIL (RETURN (PROG (#1=#:G90941) (RETURN (COND ((LETT #1# (HGET |$ConstructorCache| (QUOTE |Character|)) |Character|) (|CDRwithIncrement| (CDAR #1#))) ((QUOTE T) (|UNWIND-PROTECT| (PROG1 (CDDAR (HPUT |$ConstructorCache| (QUOTE |Character|) (LIST (CONS NIL (CONS 1 (|Character;|)))))) (LETT #1# T |Character|)) (COND ((NOT #1#) (HREM |$ConstructorCache| (QUOTE |Character|)))))))))))) - -(DEFUN |Character;| NIL (PROG (|dv$| |$| |pv$| #1=#:G90939 |i|) (RETURN (SEQ (PROGN (LETT |dv$| (QUOTE (|Character|)) . #2=(|Character|)) (LETT |$| (GETREFV 53) . #2#) (QSETREFV |$| 0 |dv$|) (QSETREFV |$| 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #2#)) (|haddProp| |$ConstructorCache| (QUOTE |Character|) NIL (CONS 1 |$|)) (|stuffDomainSlots| |$|) (QSETREFV |$| 6 (|SingleInteger|)) (QSETREFV |$| 10 (SPADCALL (PROGN (LETT #1# NIL . #2#) (SEQ (LETT |i| 0 . #2#) G190 (COND ((QSGREATERP |i| 255) (GO G191))) (SEQ (EXIT (LETT #1# (CONS (NUM2CHAR |i|) #1#) . #2#))) (LETT |i| (QSADD1 |i|) . #2#) (GO G190) G191 (EXIT (NREVERSE0 #1#)))) (QREFELT |$| 9))) (QSETREFV |$| 11 0) |$|))))) - -(MAKEPROP (QUOTE |Character|) (QUOTE |infovec|) (LIST (QUOTE #(NIL NIL NIL NIL NIL NIL (QUOTE |Rep|) (|List| 28) (|PrimitiveArray| 28) (0 . |construct|) (QUOTE |OutChars|) (QUOTE |minChar|) (|Boolean|) |CHAR;=;2$B;1| |CHAR;<;2$B;2| (|NonNegativeInteger|) |CHAR;size;Nni;3| (|Integer|) |CHAR;char;I$;6| (|PositiveInteger|) |CHAR;index;Pi$;4| |CHAR;ord;$I;7| |CHAR;lookup;$Pi;5| (5 . |coerce|) |CHAR;random;$;8| |CHAR;space;$;9| |CHAR;quote;$;10| |CHAR;escape;$;11| (|OutputForm|) |CHAR;coerce;$Of;12| (|CharacterClass|) (10 . |digit|) (|Character|) (14 . |member?|) |CHAR;digit?;$B;13| (20 . |hexDigit|) |CHAR;hexDigit?;$B;14| (24 . |upperCase|) |CHAR;upperCase?;$B;15| (28 . |lowerCase|) |CHAR;lowerCase?;$B;16| (32 . |alphabetic|) |CHAR;alphabetic?;$B;17| (36 . |alphanumeric|) |CHAR;alphanumeric?;$B;18| (|String|) |CHAR;latex;$S;19| (40 . |minIndex|) (45 . |elt|) |CHAR;char;S$;20| |CHAR;upperCase;2$;21| |CHAR;lowerCase;2$;22| (|SingleInteger|))) (QUOTE #(|~=| 51 |upperCase?| 57 |upperCase| 62 |space| 67 |size| 71 |random| 75 |quote| 79 |ord| 83 |min| 88 |max| 94 |lowerCase?| 100 |lowerCase| 105 |lookup| 110 |latex| 115 |index| 120 |hexDigit?| 125 |hash| 130 |escape| 135 |digit?| 139 |coerce| 144 |char| 149 |alphanumeric?| 159 |alphabetic?| 164 |>=| 169 |>| 175 |=| 181 |<=| 187 |<| 193)) (QUOTE NIL) (CONS (|makeByteWordVec2| 1 (QUOTE (0 0 0 0 0 0))) (CONS (QUOTE #(NIL |OrderedSet&| NIL |SetCategory&| |BasicType&| NIL)) (CONS (QUOTE #((|OrderedFinite|) (|OrderedSet|) (|Finite|) (|SetCategory|) (|BasicType|) (|CoercibleTo| 28))) (|makeByteWordVec2| 52 (QUOTE (1 8 0 7 9 1 6 0 17 23 0 30 0 31 2 30 12 32 0 33 0 30 0 35 0 30 0 37 0 30 0 39 0 30 0 41 0 30 0 43 1 45 17 0 47 2 45 32 0 17 48 2 0 12 0 0 1 1 0 12 0 38 1 0 0 0 50 0 0 0 25 0 0 15 16 0 0 0 24 0 0 0 26 1 0 17 0 21 2 0 0 0 0 1 2 0 0 0 0 1 1 0 12 0 40 1 0 0 0 51 1 0 19 0 22 1 0 45 0 46 1 0 0 19 20 1 0 12 0 36 1 0 52 0 1 0 0 0 27 1 0 12 0 34 1 0 28 0 29 1 0 0 45 49 1 0 0 17 18 1 0 12 0 44 1 0 12 0 42 2 0 12 0 0 1 2 0 12 0 0 1 2 0 12 0 0 13 2 0 12 0 0 1 2 0 12 0 0 14)))))) (QUOTE |lookupComplete|))) +(DEFUN |CHAR;coerce;$Of;12| (|c| |$|) + (ELT (QREFELT |$| 10) + (|+| (QREFELT |$| 11) (SPADCALL |c| (QREFELT |$| 21))))) + +(DEFUN |CHAR;digit?;$B;13| (|c| |$|) + (SPADCALL |c| (|spadConstant| |$| 31) (QREFELT |$| 33))) + +(DEFUN |CHAR;hexDigit?;$B;14| (|c| |$|) + (SPADCALL |c| (|spadConstant| |$| 35) (QREFELT |$| 33))) + +(DEFUN |CHAR;upperCase?;$B;15| (|c| |$|) + (SPADCALL |c| (|spadConstant| |$| 37) (QREFELT |$| 33))) + +(DEFUN |CHAR;lowerCase?;$B;16| (|c| |$|) + (SPADCALL |c| (|spadConstant| |$| 39) (QREFELT |$| 33))) + +(DEFUN |CHAR;alphabetic?;$B;17| (|c| |$|) + (SPADCALL |c| (|spadConstant| |$| 41) (QREFELT |$| 33))) + +(DEFUN |CHAR;alphanumeric?;$B;18| (|c| |$|) + (SPADCALL |c| (|spadConstant| |$| 43) (QREFELT |$| 33))) + +(DEFUN |CHAR;latex;$S;19| (|c| |$|) + (STRCONC "\\mbox{`" (STRCONC (|MAKE-FULL-CVEC| 1 |c|) "'}"))) + +(DEFUN |CHAR;char;S$;20| (|s| |$|) + (COND + ((EQL (QCSIZE |s|) 1) + (SPADCALL |s| (SPADCALL |s| (QREFELT |$| 47)) (QREFELT |$| 48))) + ((QUOTE T) (|error| "String is not a single character")))) + +(DEFUN |CHAR;upperCase;2$;21| (|c| |$|) + (QENUM (PNAME (UPCASE (NUM2CHAR (SPADCALL |c| (QREFELT |$| 21))))) 0)) + +(DEFUN |CHAR;lowerCase;2$;22| (|c| |$|) + (QENUM (PNAME (DOWNCASE (NUM2CHAR (SPADCALL |c| (QREFELT |$| 21))))) 0)) + +(DEFUN |Character| NIL + (PROG NIL + (RETURN + (PROG (#1=#:G90941) + (RETURN + (COND + ((LETT #1# (HGET |$ConstructorCache| (QUOTE |Character|)) |Character|) + (|CDRwithIncrement| (CDAR #1#))) + ((QUOTE T) + (|UNWIND-PROTECT| + (PROG1 + (CDDAR + (HPUT |$ConstructorCache| (QUOTE |Character|) + (LIST (CONS NIL (CONS 1 (|Character;|)))))) + (LETT #1# T |Character|)) + (COND + ((NOT #1#) (HREM |$ConstructorCache| (QUOTE |Character|)))))))))))) + +(DEFUN |Character;| NIL + (PROG (|dv$| |$| |pv$| #1=#:G90939 |i|) + (RETURN + (SEQ + (PROGN + (LETT |dv$| (QUOTE (|Character|)) . #2=(|Character|)) + (LETT |$| (GETREFV 53) . #2#) + (QSETREFV |$| 0 |dv$|) + (QSETREFV |$| 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #2#)) + (|haddProp| |$ConstructorCache| (QUOTE |Character|) NIL (CONS 1 |$|)) + (|stuffDomainSlots| |$|) + (QSETREFV |$| 6 (|SingleInteger|)) + (QSETREFV |$| 10 + (SPADCALL + (PROGN + (LETT #1# NIL . #2#) + (SEQ + (LETT |i| 0 . #2#) + G190 + (COND ((QSGREATERP |i| 255) (GO G191))) + (SEQ (EXIT (LETT #1# (CONS (NUM2CHAR |i|) #1#) . #2#))) + (LETT |i| (QSADD1 |i|) . #2#) + (GO G190) + G191 + (EXIT (NREVERSE0 #1#)))) + (QREFELT |$| 9))) + (QSETREFV |$| 11 0) |$|))))) + +(MAKEPROP (QUOTE |Character|) (QUOTE |infovec|) + (LIST (QUOTE + #(NIL NIL NIL NIL NIL NIL (QUOTE |Rep|) (|List| 28) (|PrimitiveArray| 28) + (0 . |construct|) (QUOTE |OutChars|) (QUOTE |minChar|) (|Boolean|) + |CHAR;=;2$B;1| |CHAR;<;2$B;2| (|NonNegativeInteger|) |CHAR;size;Nni;3| + (|Integer|) |CHAR;char;I$;6| (|PositiveInteger|) |CHAR;index;Pi$;4| + |CHAR;ord;$I;7| |CHAR;lookup;$Pi;5| (5 . |coerce|) |CHAR;random;$;8| + |CHAR;space;$;9| |CHAR;quote;$;10| |CHAR;escape;$;11| (|OutputForm|) + |CHAR;coerce;$Of;12| (|CharacterClass|) (10 . |digit|) (|Character|) + (14 . |member?|) |CHAR;digit?;$B;13| (20 . |hexDigit|) + |CHAR;hexDigit?;$B;14| (24 . |upperCase|) |CHAR;upperCase?;$B;15| + (28 . |lowerCase|) |CHAR;lowerCase?;$B;16| (32 . |alphabetic|) + |CHAR;alphabetic?;$B;17| (36 . |alphanumeric|) |CHAR;alphanumeric?;$B;18| + (|String|) |CHAR;latex;$S;19| (40 . |minIndex|) (45 . |elt|) + |CHAR;char;S$;20| |CHAR;upperCase;2$;21| |CHAR;lowerCase;2$;22| + (|SingleInteger|))) (QUOTE #(|~=| 51 |upperCase?| 57 |upperCase| 62 + |space| 67 |size| 71 |random| 75 |quote| 79 |ord| 83 |min| 88 |max| 94 + |lowerCase?| 100 |lowerCase| 105 |lookup| 110 |latex| 115 |index| 120 + |hexDigit?| 125 |hash| 130 |escape| 135 |digit?| 139 |coerce| 144 |char| + 149 |alphanumeric?| 159 |alphabetic?| 164 |>=| 169 |>| 175 |=| 181 |<=| + 187 |<| 193)) (QUOTE NIL) + (CONS + (|makeByteWordVec2| 1 (QUOTE (0 0 0 0 0 0))) + (CONS + (QUOTE #(NIL |OrderedSet&| NIL |SetCategory&| |BasicType&| NIL)) + (CONS + (QUOTE #((|OrderedFinite|) (|OrderedSet|) (|Finite|) (|SetCategory|) + (|BasicType|) (|CoercibleTo| 28))) + (|makeByteWordVec2| 52 + (QUOTE (1 8 0 7 9 1 6 0 17 23 0 30 0 31 2 30 12 32 0 33 0 30 0 35 + 0 30 0 37 0 30 0 39 0 30 0 41 0 30 0 43 1 45 17 0 47 2 45 + 32 0 17 48 2 0 12 0 0 1 1 0 12 0 38 1 0 0 0 50 0 0 0 25 0 + 0 15 16 0 0 0 24 0 0 0 26 1 0 17 0 21 2 0 0 0 0 1 2 0 0 0 + 0 1 1 0 12 0 40 1 0 0 0 51 1 0 19 0 22 1 0 45 0 46 1 0 0 19 + 20 1 0 12 0 36 1 0 52 0 1 0 0 0 27 1 0 12 0 34 1 0 28 0 29 + 1 0 0 45 49 1 0 0 17 18 1 0 12 0 44 1 0 12 0 42 2 0 12 0 0 + 1 2 0 12 0 0 1 2 0 12 0 0 13 2 0 12 0 0 1 2 0 12 0 0 14)))))) + (QUOTE |lookupComplete|))) (MAKEPROP (QUOTE |Character|) (QUOTE NILADIC) T) @ @@ -1614,7 +1750,8 @@ String(): StringCategory == IndexedString(MINSTRINGINDEX) add ++ Description: ++ A category for string-like objects -StringCategory():Category == Join(StringAggregate(), SetCategory, OpenMath) with +StringCategory():Category == _ + Join(StringAggregate(), SetCategory, OpenMath) with string: Integer -> % ++ string(i) returns the decimal representation of i in a string