Description of columns:
E - Existing PSL function
* means the function needs no change, X means it requires
an extension
C - Name conflicts with existing PSL function
O - Uses &optional and/or &rest arguments
N - Same as a PSL function with this name
S - Simple to implement
* means it should be easy to implement (given
optional arguments and the feature mentioned in column F),
U means it's in the USEFUL package,
C means it's in the COMMON package, though perhaps as a macro
when it should be a function
D - Difficult to implement
A hard feature or large effort is required to add it, such
as multiple values
F - Feature needed
A feature which does not currently exist in PSL is needed
Comments appear on the line FOLLOWING the function name.
E C O N S D F
typep * *
subtypep *
null *
symbolp idp
atom *
consp pairp
listp *
numberp *
integerp fixp
rationalp * rationals
floatp *
complexp * complex #s
characterp *
stringp *
vectorp X
true for all vector types
arrayp * arrays
functionp *
subrp codep
closurep * closures
eq *
eql eqn
equal *
equalp * *
not *
and *
or *
quote *
function X
must return a lexical closure for a lambda
closure * closures
symeval valuecell
fsymeval *
boundp C
fboundp C
macro-p C
special-form-p *
setq *
psetq U
set *
fset *
makunbound *
fmakunbound remd
setf U
swapf *
exchf *
apply *
funcall * U
funcall* * C
progn *
prog1 U
prog2 X
let U
let* U
progv *
flet * local functions
labels * local functions
macrolet * local functions
cond *
if U
when U
unless U
case *
PSL case is much less general, using only #s
typecase * type classes
block * block tags
return X
no restriction on placement
return-from * block tags
do UX
takes an optional block tag
do* UX
takes an optional block tag
dolist *
dotimes *
mapcar X *
takes more than one list
maplist X *
takes more than one list
mapc X *
takes more than one list, returns first list as value
mapl * *
mapcan X *
takes more than one list
mapcon X *
takes more than one list
prog X
variable initialization and optional block tag
prog* *
go X
no restriction on placement
values * * multiple values
values-list * "
multiple-value-list * "
mvcall * "
mvprog1 * "
multiple-value-bind * "
multiple-value * "
catch * *
catch-all *
unwind-all *
unwind-protect *
throw *
macro *
defmacro UX
should parse &keywords
displace *
macroexpand *
macroexpand-1 *
declare *
requires some hair in the compiler to use declarations
property lists must be represented as alternating indicator/value
getpr * get
has optional "instead-of-nil" value
putpr put
rempr remprop
plist prop
getf * *
has optional "instead-of-nil" value
putf *
remf *
get-properties *
map-properties *
get-pname id2string
samepnamep *
make-symbol newid
copysymbol * *
gensym X *
optional counter or prefix
gentemp * *
symbol-package * packages
make-package * * packages
package * "
package-name * "
begin-package * "
end-package * "
intern X * "
takes optional package name
remob X * "
takes optional package name
internedp * internp "
takes optional package name
externalp * * "
export * * "
unexport * * "
import * * "
shadow * * "
use * * "
provide * "
require * * "
package-use-conflicts * *
do-symbols * pkgs, blk tags
do-external-symbols * pkgs, blk tags
do-internal-symbols * pkgs, blk tags
do-all-symbols * pkgs, blk tags
zerop X
true for complex zero
plusp *
minusp *
oddp *
evenp *
= * *
/= * *
< * *
> * *
<= * *
>= * *
max *
should be function, not macro
min *
should be function, not macro
fuzzy= * *
fuzziness *
+ * *
- * *
* * *
/ * *
1+ add1
1- sub1
1+ and 1- can't be scanned as IDs with the current PSL scanner
incf U
decf U
conjugate * complex #s
gcd * * cplx, rationals
lcm * * cplx, rationals
....exponetial, logarithmic and trigonometric functions
float X *
takes optional "other" floating point #, supposed to use that type
rational * rationals
rationalize * * rationals
numerator * rationals
denominator * rationals