RETURN-VALUES-UNSPECIFIEDCLOSE, IN-PACKAGE, RENAME-PACKAGE, TRACE, UNTRACE, INSPECT, SET-SYNTAX-FROM-CHAR, LOCALLY, PROVIDE, and REQUIRE are not clear about the values returned from those constructs.
CLOSE -- T IN-PACKAGE -- the new package, i.e. the value of *PACKAGE* after the execution of IN-PACKAGE. RENAME-PACKAGE -- the renamed package. TRACE (when called with arguments) -- implementation-dependent. UNTRACE -- implementation-dependent. INSPECT -- implementation-dependent. SET-SYNTAX-FROM-CHAR -- T LOCALLY -- the return values of the last form of its body, i.e. the body is surrounded by an implicit PROGN. PROVIDE -- implementation-dependent. REQUIRE -- implementation-dependent.
(NB: the issue CLOSED-STREAM-OPERATIONS proposes modifying the return value of CLOSE on closed streams. The issue REQUIRE-PATHNAME-DEFAULTS proposes removing REQUIRE and PROVIDE. Those proposals would take priority over this one.)
PROVIDE and REQUIRE are not likely to appear except in the "top level" of files, and so their return value is possibly moot. Another proposal would eliminate them from the language, and then their return value would definitely be moot!
There is some sentiment for leaving unspecified the values of the debugging/environment features such as TRACE and UNTRACE, for the same reasons that so much else of their behavior is unspecified.
Notes from Oct 88 X3J13:
Except for LOCALLY, why bother?
That just causes portability problems. Don't want to leave it unspecified -unless- someone can cite a reason to do so.
"If many weren't defined, maybe we should leave 'em, but since nearly all -are- defined, let's just go ahead and round out the set."
Most text books she's seen show CLOSE returning NIL. One text book shows it returning T. Since some people like to think of T as success and NIL as failure, maybe it should always return T. (See Issue: CLOSED-STREAM-OPERATIONS.)