PSL Manual 7 February 1983 Strings and Vectors
section 8.0 page 8.1
CHAPTER 8
CHAPTER 8
CHAPTER 8
STRINGS AND VECTORS
STRINGS AND VECTORS
STRINGS AND VECTORS
8.1. Vector-Like Objects . . . . . . . . . . . . . 8.1
8.2. Strings . . . . . . . . . . . . . . . . . 8.1
8.3. Vectors . . . . . . . . . . . . . . . . . 8.3
8.4. Word Vectors . . . . . . . . . . . . . . . 8.5
8.5. General X-Vector Operations . . . . . . . . . . 8.5
8.6. Arrays . . . . . . . . . . . . . . . . . 8.7
8.7. Common LISP String Functions . . . . . . . . . . 8.7
8.1. Vector-Like Objects
8.1. Vector-Like Objects
8.1. Vector-Like Objects
______ ______ ____ ______ ________ ______
In this Chapter, LISP strings, vectors, word-vectors, halfword-vectors,
____ ______
and byte-vectors are described. Each may have several elements, accessed
_______
by an integer index. For convenience, members of this set are referred to
_ ______ _ ______ ____
as x-vectors. X-vector functions also apply to lists. Currently, the
Size UpB
_ ______ Size UpB
index for x-vectors ranges from 0 to an upper limit, called the Size or UpB
Size
_ ______ Size ______
(upper bound). Thus an x-vector X has 1 + Size(X) elements. Strings index
______
from 0 because they are considered to be packed vectors of bytes. Bytes
are 7 bits on the DEC-20 and 8 bits on the VAX.
______ ____
______ ____
______ ____
[??? Note that with new integer tagging, strings are "packed" words,
[??? Note that with new integer tagging, strings are "packed" words,
[??? Note that with new integer tagging, strings are "packed" words,
______
______
______
which are special cases of vectors. Should we add byte-vectors too, so
which are special cases of vectors. Should we add byte-vectors too, so
which are special cases of vectors. Should we add byte-vectors too, so
______
______
______
that strings are different print mode of byte vector ???]
that strings are different print mode of byte vector ???]
that strings are different print mode of byte vector ???]
[??? Size should probably be replaced by UPLIM or UPB. ???]
[??? Size should probably be replaced by UPLIM or UPB. ???]
[??? Size should probably be replaced by UPLIM or UPB. ???]
In RLISP syntax, X[i]; may be used to access the i'th element of an
_ ______
x-vector, and X[i]:=y; is used to change the i'th element to y. These
Indx SetIndx
Indx SetIndx
functions correspond to the LISP functions Indx and SetIndx.
[??? Change names to GetIndex, PutIndex ???]
[??? Change names to GetIndex, PutIndex ???]
[??? Change names to GetIndex, PutIndex ???]
For functions which change an object from one data type to another, see
Section 4.3.
8.2. Strings
8.2. Strings
8.2. Strings
______ ______
A string is currently thought of as a Byte vector, or a packed integer
______ ______
vector, with elements that are ASCII characters. A string has a header
containing its length and perhaps a tag. The next M words contain the 0
... Size characters, packed as appropriate, terminated with at least 1
______ ______
NULL. On the DEC-20, this means that strings have an ASCIZ string starting
Strings and Vectors 7 February 1983 PSL Manual
page 8.2 section 8.2
in the second word. (ASCIZ strings are NULL terminated.)
Make!-String
Make!-String ____ _______ _______ _______ ______ ____
(Make!-String SIZE:integer INITVAL:integer): string expr
______ ____
Constructs and returns a string with SIZE characters, each
_______
initialized to the ASCII code INITVAL.
MkString
MkString _____ _______ _______ _______ ______ ____
(MkString UPLIM:integer INITVAL:integer): string expr
Make!-String
Make!-String
An old form of Make!-String. Returns a string of characters all
_______ _____
initialized to INITVAL, with upper bound UPLIM. So, the returned
_____ _
string contains a total of UPLIM + 1 characters.
String
String ____ _______ ______ _____
(String [ARGS:integer]): string nexpr
______ ____
Create string of elements from a list of ARGS.
[??? Should we check each arg in 0 ... 127. What about 128
[??? Should we check each arg in 0 ... 127. What about 128
[??? Should we check each arg in 0 ... 127. What about 128
- 255 with 8 bit vectors? ???]
- 255 with 8 bit vectors? ???]
- 255 with 8 bit vectors? ???]
(String 65 66 67) returns "ABC"
CopyStringToFrom
CopyStringToFrom ___ ______ ___ ______ ___ ______ ____
(CopyStringToFrom NEW:string OLD:string): NEW:string expr
___ ___
Copy all characters from OLD into NEW. This function is
destructive.
CopyString
CopyString _ ______ ______ ____
(CopyString S:string): string expr
______
Copy to new heap string, allocating space.
[??? Should we add GetS, PutS, UpbS, etc ???]
[??? Should we add GetS, PutS, UpbS, etc ???]
[??? Should we add GetS, PutS, UpbS, etc ???]
When processing strings it is frequently necessary to be able to specify
a particular character. In PSL a character is just its ASCII code
representation, but it is difficult to remember the code, and the use of
Char
Char
codes does not add to the readability of programs. One can use the Char
__
macro, defined in Chapter 20. It expects a single character id as argument
and returns the ASCII code of that character. For example
(Char A) returns 65
(Char !a) returns 97
(Char !@) returns 64
PSL Manual 7 February 1983 Strings and Vectors
section 8.2 page 8.3
Note that to get lower-case a one must precede the a by "!", otherwise the
a will be raised. See also the sharp-sign macros in Chapter 17.
8.3. Vectors
8.3. Vectors
8.3. Vectors
______ ____
A vector is a structured entity in which random item elements may be
_______ ______
accessed with an integer index. A vector has a single dimension. Its
maximum size is determined by the implementation and available space. A
______
suggested input/output "vector notation" is defined (see Chapter 12).
GetV
GetV _ ______ _____ _______ ___ ____
(GetV V:vector INDEX:integer): any expr
_____ ______ _
Returns the value stored at position INDEX of the vector V. The
_____
type mismatch error may occur. An error occurs if the INDEX does
UPBV
UPBV _
not lie within 0 ... (UPBV V) inclusive:
***** INDEX subscript is out of range
_ _____
A similar effect may be obtained in RLISP by using V[INDEX];.
MkVect
MkVect _____ _______ ______ ____
(MkVect UPLIM:integer): vector expr
______ _____
Defines and allocates space for a vector with UPLIM + 1 elements
_____
accessed as 0 ... UPLIM. Each element is initialized to NIL. If
_____
UPLIM is -1, an empty vector is returned. An error occurs if
_____ ______
UPLIM is < -1 or if there is not enough space for a vector of
this size:
***** A vector of size UPLIM cannot be allocated
Make!-Vector
Make!-Vector _____ _______ _______ ___ ______ ____
(Make!-Vector UPLIM:integer INITVAL:any): vector expr
MkVect
MkVect _______
Like MkVect but each element is initialized to INITVAL.
PutV
PutV _ ______ _____ _______ _____ ___ ___ ____
(PutV V:vector INDEX:integer VALUE:any): any expr
_____ ______ _ _____ _____
Stores VALUE in the vector V at position INDEX. VALUE is
_____
returned. The type mismatch error may occur. If INDEX does not
UPBV
UPBV _
lie in 0 ... UPBV(V), an error occurs:
***** INDEX subscript is out of range
A similar effect can be obtained in RLISP by typing in
_ _____ _____
V[INDEX]:=VALUE;. It is important to use square brackets, i.e.
"[]".
Strings and Vectors 7 February 1983 PSL Manual
page 8.4 section 8.3
UpbV
UpbV _ ___ ___ _______ ____
(UpbV U:any): {NIL, integer} expr
_ _ ______
Returns the upper limit of U if U is a vector, or NIL if it is
not.
Vector
Vector ____ ___ ______ _____
(Vector [ARGS:any]): vector nexpr
______ ____ ____ ______
Create vector of elements from list of ARGS. The vector has N
Size
Size ____
elements, i.e. Size = N - 1, in which N is the number of ARGS.
CopyVectorToFrom
CopyVectorToFrom ___ ______ ___ ______ ___ ______ ____
(CopyVectorToFrom NEW:vector OLD:vector): NEW:vector expr
Move elements, don't recurse.
[ ???Check size compatibility? ]
[ ???Check size compatibility? ]
[ ???Check size compatibility? ]
CopyVector
CopyVector _ ______ ______ ____
(CopyVector V:vector): vector expr
______
Copy to new vector in heap.
The following functions can be used after the FAST!-VECTOR module has
been loaded (LOAD FAST!-VECTOR).
IGetV
IGetV _ ______ _____ _______ ___ ____ ________ ____
(IGetV V:vector INDEX:integer): any open-compiled, expr
GetV
GetV
Used the same way as GetV.
IPutV
IPutV _ ______ _____ _______ _____ ___ ___ ____ ________ ____
(IPutV V:vector INDEX:integer VALUE:any): any open-compiled, expr
PutV
PutV
Fast version of PutV.
ISizeV
ISizeV _ ___ ___ _______ ____ ________ ____
(ISizeV U:any): {NIL,integer} open-compiled, expr
UpbV
UpbV
Fast version of UpbV.
ISizeS
ISizeS _ _ ______ _______ ____ ________ ____
(ISizeS X:x-vector): integer open-compiled, expr
Size
Size
Fast version of Size.
IGetS
IGetS _ _ ______ _ _______ ___ ____ ________ ____
(IGetS X:x-vector I:integer): any open-compiled, expr
Indx
Indx
Fast version of Indx.
PSL Manual 7 February 1983 Strings and Vectors
section 8.3 page 8.5
IPutS
IPutS _ _ ______ _ _______ _ ___ ___ ____ ________ ____
(IPutS X:x-vector I:integer A:any): any open-compiled, expr
SetIndx
SetIndx
Fast version of SetIndx.
8.4. Word Vectors
8.4. Word Vectors
8.4. Word Vectors
____ ______ _ _______
Word-vectors or w-vectors are vector-like structures, in which each
element is a "word" sized, untagged entity. This can be thought of as a
______ ______
special case of fixnum vector, in which the tags have been removed.
Make!-Words
Make!-Words _____ _______ _______ _______ ____ ______ ____
(Make!-Words UPLIM:integer INITVAL:integer): Word-Vector expr
____ ______ _____
Defines and allocates space for a Word-Vector with UPLIM + 1
_______
elements, each initialized to INITVAL.
Make!-Halfwords
Make!-Halfwords _____ _______ _______ _______ ________ ______ ____
(Make!-Halfwords UPLIM:integer INITVAL:integer): Halfword-Vector expr
________ ______ _____
Defines and allocates space for a Halfword-vector with UPLIM + 1
_______
elements, each initialized to INITVAL.
Make!-Bytes
Make!-Bytes _____ _______ _______ _______ ____ ______ ____
(Make!-Bytes UPLIM:integer INITVAL:integer): Byte-vector expr
____ ______ _____
Defines and allocates space for a Byte-Vector with UPLIM + 1
_______
elements, each initialized to INITVAL.
[??? Should we convert elements to true integers when accessing ???]
[??? Should we convert elements to true integers when accessing ???]
[??? Should we convert elements to true integers when accessing ???]
[??? Should we add GetW, PutW, UpbW, etc ???]
[??? Should we add GetW, PutW, UpbW, etc ???]
[??? Should we add GetW, PutW, UpbW, etc ???]
8.5. General X-Vector Operations
8.5. General X-Vector Operations
8.5. General X-Vector Operations
Size
Size _ _ ______ _______ ____
(Size X:x-vector): integer expr
_ ______
Size (upper bound) of x-vector.
Indx
Indx _ _ ______ _ _______ ___ ____
(Indx X:x-vector I:integer): any expr
_ ______
Access the I'th element of an x-vector.
[??? Rename to GetIndex, or some such ???]
[??? Rename to GetIndex, or some such ???]
[??? Rename to GetIndex, or some such ???]
Size
_ Size _
Generates a range error if I is outside the range 0 ... Size(X):
Strings and Vectors 7 February 1983 PSL Manual
page 8.6 section 8.5
***** Index is out of range
SetIndx
SetIndx _ _ ______ _ _______ _ ___ ___ ____
(SetIndx X:x-vector I:integer A:any): any expr
_
Store an appropriate value, A, as the I'th element of an
_ ______ _
x-vector. Generates a range error if I is outside the range
Size
Size _
0...Size(X):
***** Index is out of range
Sub
Sub _ _ ______ __ _______ _ _______ _ ______ ____
(Sub X:x-vector I1:integer S:integer): x-vector expr
_ ______ __
Extract a subrange of an x-vector, starting at I1, producing a
Size Size
_ ______ Size _ ____ _ ______ Size ___
new x-vector of Size S. Note that an x-vector of Size 0 has one
entry.
SetSub
SetSub _ _ ______ __ _______ _ _______ _ _ ______ _ ______ ____
(SetSub X:x-vector I1:integer S:integer Y:x-vector): x-vector expr
_ _ _ __ _
Store subrange of Y of size S into X starting at I1. Returns Y.
SubSeq
SubSeq _ _ ______ __ _______ __ _______ _ ______ ____
(SubSeq X:x-vector LO:integer HI:integer): x-vector expr
Size
_ ______ Size __ __
Returns an x-vector of Size HI-LO-1, beginning with the element
_ __ _
of X with index LO. In other words, returns the subsequence of X
__ ____ ______ __
starting at LO and ending just before HI. For example,
(Setq A '[0 1 2 3 4 5 6])
(SubSeq A 4 6)
returns [4 5].
SetSubSeq
SetSubSeq _ _ ______ __ _______ __ _______ _ _ ______ _ _ ______ ____
(SetSubSeq X:x-vector LO:integer HI:integer Y:x-vector): Y:x-vector expr
Size
_ Size __ __
Y must be of Size HI-LO-1; it must also be of the same type of
_ ______ _ __ __ _
x-vector as X. Elements LO through HI-1 in X are replaced by
Size
Size _ _ _ _
elements 0 through Size(Y) of Y. Y is returned and X is changed
destructively. If A is "0123456" and B is "abcd", then
(SetSubSeq A 3 7 B)
returns "abcd". A is "012abcd" and B is unchanged.
Concat
Concat _ _ ______ _ _ ______ _ ______ ____
(Concat X:x-vector Y:x-vector): x-vector expr
_ ______
Concatenate 2 x-vectors. Currently they must be of same type.
PSL Manual 7 February 1983 Strings and Vectors
section 8.5 page 8.7
[??? Should we do conversion to common type ???]
[??? Should we do conversion to common type ???]
[??? Should we do conversion to common type ???]
TotalCopy
TotalCopy _ ___ ___ ____
(TotalCopy S:any): any expr
Returns a unique copy of entire structure, i.e., it copies
everything for which storage is allocated - everything but inums
Copy TotalCopy
Copy TotalCopy
and ids. Like Copy (Chapter 7)TotalCopy will not terminate when
applied to circular structures.
8.6. Arrays
8.6. Arrays
8.6. Arrays
_____
_____
_____
macro
macro
Arrays do not exist in PSL as distinct data-types; rather an array macro
package is anticipated for declaring and managing multi-dimensional arrays
____ _________ ____
of items, characters and words, by mapping them onto one dimensional
vectors.
[??? What operations, how to map, and what sort of checking ???]
[??? What operations, how to map, and what sort of checking ???]
[??? What operations, how to map, and what sort of checking ???]
8.7. Common LISP String Functions
8.7. Common LISP String Functions
8.7. Common LISP String Functions
A Common LISP compatible package of string and character functions has
been implemented in PSL, obtained by LOADing the STRINGS module. The
following functions are defined from Chapters 13 and 14 of the Common LISP
Char String
Char String
manual [Steele 81]. Char and String are not defined because of PSL
functions with the same name.
Common LISP provides a character data type in which every character
object has three attributes: code, bits, and font. The bits attribute
allows extra flags to be associated with a character. The font attribute
permits a specification of the style of the glyphs (such as italics). PSL
does not support nonzero bit and font attributes. Because of this some of
the Common LISP character functions described below have no affect or are
not very useful as implemented in PSL. They are present for compatibility.
Recall that in PSL a character is represented as its code, a number in
the range 0...127. For an argument to the following character functions
Char
Char
give the code or use the Char function or the sharp-sign macros in Chapter
17.
Standard!-CharP
Standard!-CharP _ _________ _______ ____
(Standard!-CharP C:character): boolean expr
Returns T if the argument is a "standard character", that is, one
of the ninety-five ASCII printing characters or <return>.
Strings and Vectors 7 February 1983 PSL Manual
page 8.8 section 8.7
(Standard-CharP (Char A)) returns T
(Standard-CharP (Char !^A)) returns NIL
GraphicP
GraphicP _ _________ _______ ____
(GraphicP C:character): boolean expr
_
Returns T if C is a printable character and NIL if it is a
non-printable (formatting or control) character. The space
character is assumed to be graphic.
String!-CharP
String!-CharP _ _________ _______ ____
(String!-CharP C:character): boolean expr
_
Returns T if C is a character that can be an element of a string.
Standard-Charp Graphicp
Standard-Charp Graphicp
Any character that satisfies Standard-Charp and Graphicp also
String-Charp
String-Charp
satisfies String-Charp.
AlphaP
AlphaP _ _________ _______ ____
(AlphaP C:character): boolean expr
_
Returns T if C is an alphabetic character.
UpperCaseP
UpperCaseP _ _________ _______ ____
(UpperCaseP C:character): boolean expr
_
Returns T if C is an upper case letter.
LowerCaseP
LowerCaseP _ _________ _______ ____
(LowerCaseP C:character): boolean expr
_
Returns T if C is a lower case letter.
BothCaseP
BothCaseP _ _________ _______ ____
(BothCaseP C:character): boolean expr
AlphaP
AlphaP
In PSL this function is the same as AlphaP.
DigitP
DigitP _ _________ _______ ____
(DigitP C:character): boolean expr
_
Returns T if C is a digit character (optional radix not
supported).
AlphaNumericP
AlphaNumericP _ _________ _______ ____
(AlphaNumericP C:character): boolean expr
_
Returns T if C is a digit or an alphabetic.
PSL Manual 7 February 1983 Strings and Vectors
section 8.7 page 8.9
Char!=
Char!= __ _________ __ _________ _______ ____
(Char!= C1:character C2:character): boolean expr
__ __
Returns T if C1 and C2 are the same in all three attributes.
Char!-Equal
Char!-Equal __ _________ __ _________ _______ ____
(Char!-Equal C1:character C2:character): boolean expr
__ __
Returns T if C1 and C2 are similar. Differences in case, bits,
or font are ignored by this function.
Char!<
Char!< __ _________ __ _________ _______ ____
(Char!< C1:character C2:character): boolean expr
__ __
Returns T if C1 is strictly less than C2.
Char!>
Char!> __ _________ __ _________ _______ ____
(Char!> C1:character C2:character): boolean expr
__ __
Returns T if C1 is strictly greater than C2.
Char!-LessP
Char!-LessP __ _________ __ _________ _______ ____
(Char!-LessP C1:character C2:character): boolean expr
Char!<
Char!<
Like Char!< but ignores differences in case, fonts, and bits.
Char!-GreaterP
Char!-GreaterP __ _________ __ _________ _______ ____
(Char!-GreaterP C1:character C2:character): boolean expr
Char!>
Char!>
Like Char!> but ignores differences in case, fonts, and bits.
Char!-Code
Char!-Code _ _________ _________ ____
(Char!-Code C:character): character expr
_
Returns the code attribute of C. In PSL this function is an
identity function.
Char!-Bits
Char!-Bits _ _________ _______ ____
(Char!-Bits C:character): integer expr
_
Returns the bits attribute of C, which is always 0 in PSL.
Char!-Font
Char!-Font _ _________ _______ ____
(Char!-Font C:character): integer expr
_
Returns the font attribute of C, which is always 0 in PSL.
Code!-Char
Code!-Char _ _______ _________ ___ ____
(Code!-Char I:integer): {character,nil} expr
The purpose of this function is to be able to construct a
character by specifying the code, bits, and font. Because bits
Code!-Char
Code!-Char
and font attributes are not used in PSL, Code!-Char is an
Strings and Vectors 7 February 1983 PSL Manual
page 8.10 section 8.7
identity function.
Character
Character _ _________ ______ __ _________ ____
(Character C:{character, string, id}): character expr
_ _ _
Attempts to coerce C to be a character. If C is a character, C
_
is returned. If C is a string, then the first character of the
_
string is returned. If C is a symbol, the first character of the
symbol is returned. Otherwise an error occurs.
Char!-UpCase
Char!-UpCase _ _________ _________ ____
(Char!-UpCase C:character): character expr
LowerCaseP Char-UpCase
LowerCaseP _ Char-UpCase
If LowerCaseP(C) is true, then Char-UpCase returns the code of
_ _
the upper case of C. Otherwise it returns the code of C.
Char!-DownCase
Char!-DownCase _ _________ _________ ____
(Char!-DownCase C:character): character expr
UpperCaseP Char-DownCase
UpperCaseP _ Char-DownCase
If UpperCaseP(C) is true, then Char-DownCase returns the code of
_ _
the lower case of C. Otherwise it returns the code of C.
Digit!-Char
Digit!-Char _ _________ _______ ____
(Digit!-Char C:character): integer expr
_ _
Converts character to its code if C is a one-digit number. If C
_
is larger than one digit, NIL is returned. If C is not numeric,
an error message is caused.
Char!-Int
Char!-Int _ _________ _______ ____
(Char!-Int C:character): integer expr
Converts character to integer. This is the identity operation in
PSL.
Int!-Char
Int!-Char _ _______ _________ ____
(Int!-Char I:integer): character expr
Converts integer to character. This is the identity operation in
PSL.
The string functions follow.
RplaChar
RplaChar _ ______ _ _______ _ _________ _________ ____
(RplaChar S:string I:integer C:character): character expr
_ _ _
Store a character C in a string S at position I.
PSL Manual 7 February 1983 Strings and Vectors
section 8.7 page 8.11
String!=
String!= __ ______ __ ______ _______ ____
(String!= S1:string S2:string): boolean expr
__ __
Compares two strings S1 and S2, case sensitive. (Substring
options not implemented).
String!-Equal
String!-Equal __ ______ __ ______ _______ ____
(String!-Equal S1:string S2:string): boolean expr
__ __
Compare two strings S1 and S2, ignoring case, bits and font.
_____ _______
The following string comparison functions are extra-boolean. If the
comparison results in a value of T, the first position of inequality in the
strings is returned.
String!<
String!< __ ______ __ ______ _____ _______ ____
(String!< S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case sensitive.
String!>
String!> __ ______ __ ______ _____ _______ ____
(String!> S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case sensitive.
String!<!=
String!<!= __ ______ __ ______ _____ _______ ____
(String!<!= S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case sensitive.
String!>!=
String!>!= __ ______ __ ______ _____ _______ ____
(String!>!= S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case sensitive.
String!<!>
String!<!> __ ______ __ ______ _____ _______ ____
(String!<!> S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case sensitive.
String!-LessP
String!-LessP __ ______ __ ______ _____ _______ ____
(String!-LessP S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case differences are
ignored.
String!-GreaterP
String!-GreaterP __ ______ __ ______ _____ _______ ____
(String!-GreaterP S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case differences are
ignored.
Strings and Vectors 7 February 1983 PSL Manual
page 8.12 section 8.7
String!-Not!-GreaterP
String!-Not!-GreaterP __ ______ __ ______ _____ _______ ____
(String!-Not!-GreaterP S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case differences are
ignored.
String!-Not!-LessP
String!-Not!-LessP __ ______ __ ______ _____ _______ ____
(String!-Not!-LessP S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case differences are
ignored.
String!-Not!-Equal
String!-Not!-Equal __ ______ __ ______ _____ _______ ____
(String!-Not!-Equal S1:string S2:string): extra-boolean expr
Lexicographic comparison of strings. Case differences are
ignored.
String!-Repeat
String!-Repeat _ ______ _ _______ ______ ____
(String!-Repeat S:string I:integer): string expr
_ _
Appends copy of S to itself total of I-1 times.
String!-Trim
String!-Trim ___ ____ ______ _ ______ ______ ____
(String!-Trim BAG:{list, string} S:string): string expr
___ _
Remove leading and trailing characters in BAG from a string S.
(String-Trim "ABC" "AABAXYZCB") returns "XYZ"
(String-Trim (List (Char A) (Char B) (Char C))
"AABAXYZCB")
returns "XYZ"
(String-Trim '(65 66 67) "ABCBAVXZCC") returns "VXZ"
String!-Left!-Trim
String!-Left!-Trim ___ ____ ______ _ ______ ______ ____
(String!-Left!-Trim BAG:{list, string} S:string): string expr
Remove leading characters from string.
String!-Right!-Trim
String!-Right!-Trim ___ ____ ______ _ ______ ______ ____
(String!-Right!-Trim BAG:{list, string} S:string): string expr
Remove trailing characters from string.
String!-UpCase
String!-UpCase _ ______ ______ ____
(String!-UpCase S:string): string expr
Copy and raise all alphabetic characters in string.
PSL Manual 7 February 1983 Strings and Vectors
section 8.7 page 8.13
NString!-UpCase
NString!-UpCase _ ______ ______ ____
(NString!-UpCase S:string): string expr
Destructively raise all alphabetic characters in string.
String!-DownCase
String!-DownCase _ ______ ______ ____
(String!-DownCase S:string): string expr
Copy and lower all alphabetic characters in string.
NString!-DownCase
NString!-DownCase _ ______ ______ ____
(NString!-DownCase S:string): string expr
Destructively lower all alphabetic characters in string.
String!-Capitalize
String!-Capitalize _ ______ ______ ____
(String!-Capitalize S:string): string expr
Copy and raise first letter of all words in string; other letters
in lower case.
NString!-Capitalize
NString!-Capitalize _ ______ ______ ____
(NString!-Capitalize S:string): string expr
Destructively raise first letter of all words; other letters in
lower case.
String!-to!-List
String!-to!-List _ ______ ____ ____
(String!-to!-List S:string): list expr
Unpack string characters into a list.
String!-to!-Vector
String!-to!-Vector _ ______ ______ ____
(String!-to!-Vector S:string): vector expr
Unpack string characters into a vector.
SubString
SubString _ ______ __ _______ __ _______ ______ ____
(SubString S:string LO:integer HI:integer): string expr
SubSeq
SubSeq ______
Same as SubSeq, but the first argument must be a string. Returns
Size
_ Size __ __
a substring of S of Size HI - LO - 1, beginning with the element
__
with index LO.
String!-Length
String!-Length _ ______ _______ ____
(String!-Length S:string): integer expr
Last index of a string, plus one.