Each Scheme symbol corresponds to a string. This covenience library lets the programmer manipulate the string representations of symbols simply by passing the symbols, omitting the step of converting back and forth between symbols and strings.
This library is patterned after the following prior art.
(symbol-length symbol) -> integer
Returns the string-length of symbol as a string.
(symbol<? symbol1 symbol2) -> boolean
Returns the result of string<? applied to the symbols as strings.
(symbol-ci<? symbol1 symbol2) -> boolean
Returns the result of string-ci<? applied to the symbols as strings.
(symbol-prefix? prefix-string symbol) -> boolean
(symbol-suffix? suffix-string symbol) -> boolean
#t if symbol as a string starts with
prefix-string or ends with suffix-string,
respectively. Else returns
Matching is case sensitive. A zero-length string matches any symbol.
[Modeled after SRFI 13 string-prefix? and string-suffix?.]
(symbol-middle symbol prefix-string [suffix-string]) -> string
If symbol as a string starts with prefix-string and
ends with suffix-string, returns the part between them as a
string. Else returns
Matching is done as with symbol-prefix? and
symbol-suffix?. If suffix-string is omitted or
#f, a zero-length string is assumed.
(symbol-substring symbol start [end]) -> string
Returns the part of symbol as a string between the character
indexes start (inclusive) and end (exclusive). If
end is omitted of
#f, it defaults to the length of
Mutating the result string does not change the symbol.
(symbol-append object ...) -> symbol
Like string-append from RnRS, but the result is a symbol instead of a string, and each object can be any of:
#f(ignored as if it were a zero-length string)
(symbol-transform string-proc symbol arg ...) -> symbol
(string->symbol (string-proc (symbol->string symbol) arg ...))
(list-sort symbol<? (features))
(symbol-substring 'geronimo 2 6) ; => "roni" (symbol-middle 'make-move! "" "") ; => "make-move!" (symbol-middle 'make-move! "" "!") ; => make-move (symbol-middle 'make-move! "make-" "!") ; => "move" (symbol-middle 'make-move! "make+" "!") ; => #f
(symbol-append) ; => || (symbol-append #\a) ; => a (symbol-append "a") ; => a (symbol-append 'foo ":") => |foo:| (let ((count 99) (things "bottles") (ask? #f)) (symbol-append "start-with-" count #\- things (and ask? #\?))) ; => start-with-99-bottles (symbol-transform string-upcase 'yeah) ; => YEAH