Releases: tfeb/tfeb-lisp-hax
let-values is better, process-declarations has a macro
let-values
now avoids rebinding in sequential forms, which can avoid unused variables in cases like
(let*-values (((a b) ...)
((c d) (f a b)))
... don't use a and b ...)
process-declarations
has a new processing-declaration-specifier
macro which makes things a little nicer. It is still unstable. let-values
uses process-declarations
for its declaration processing now.
A possibly-unstable process-declarations hack
let-values
let-values
provides four let
-style macros which work with multiple values.
let-values
andlet*-values
are likelet
andlet*
respectivelylet-values*
andlet*-values*
have semantics likemultiple-value-call
: they take all the values from a number of initforms and use them, in parallel and sequentially respectively.
As an example of let-values*
> (let-values* (((a b c) (values 1 2) 3))
(+ a b c))
6
There are also improvements to valid-type-specifier-p
: it now works by checking that typep
can't signal an error, which I think can't be evaded the way SBCL evades things with subtypep
.
Utilities: valid-type-specifier-p
There's a function, valid-type-specifier-p
which attempts (and perhaps actually does) answer the question 'is something a valid type specifier?'. It is as horrible as you would expect.
Bug fix and enhancements in with-accumulators
with-accumulators
was broken in the last release: it would get the arglist of the local function wrong. This fixes that and adds a new by
argument:
(with-accumulators ((a + :by 1))
...
(a)
...)
will make the local function have no arguments and step by the value of by
. by
is a form evaluated in the current lexical environment for each call.
Utilities enhancements, minimal documentation
org.tfeb.hax.utilities
was previously undocumented. It now is slightly documented but is explicitly not stable.
thunk
and thunk*
are new: this new version is because Štar depends on these now, and I wanted to be able to say that you need at least 8.6.0
Enhancements to collecting and trace-macroexpand
with-accumulators
now can provide defaults for the accumulator functions it defines.
trace-macroexpand
now has its own stream, *trace-macroexpand-output*
, which by default is a synonym stream to *trace-output*
.
Both these changes are (should be!) compatible.
There was no 8.4.0 release.
Catchup release for Štar
This includes an undocumented with-names
macro in utilities, which Štar relies on. There are no other changes since 8.2.1
An iteration macro for multiple lists: dolists
simple-loops
now has dolists
, which is like dolist
but for multiple lists. It also has fine control over what values, if any, are returned by the iteration.
Improvements to slog and collecting
slog. The default condition type used by slog
when its first argument is a string is now controlled by a variable. There is support for resetting the precision time offset, which is needed for dumping & restoring images.
collecting. collect-into
can now collect into the local functions defined by collecting
/ with-collectors
, not just the objects made by make-collector
.