The proceed adbmal* seems like an interesting alternative to values for some situations.
But the syntactic versions don't add anything except disadvantages -- they delay evaluation (possibly to a different dynamic extent), and they do not memoize their results, so multiple calls could produce different values and could produce multiple side effects. Consider the following to remove these issues.
(adbmal expr ...) ==> (let ((tmp expr) ...) (lambda (f) (f tmp ...)))
(where (tmp ...) are generated temporary ids).
The advantage this has over adbmal* is that it avoids cons'ing up arguments into a list and needing to call apply on f.
alet is interesting -- I see it having potential to be CL's destructuring-bind with added support for multi-valued expressions. Did you consider arbitrary recursion to the bindings?
(alet (((a (values b ((adbmal c . d) . e))) expr)) ...)
How about destructuring vector expressions too?
Semantic consistency issues I have with alet:
Rules 1 and 2-1 mean that:
(foo 'bar) ==> simple binding
(foo bar '(1 2)) ==> de-structuring ???
3-1/5-1:
((foo bar) (iota 2)) ==> destructuring
((foo bar) (iota 3)) ==> destructuring, runtime error -- too many values
((foo) (iota 2)) ==> single-variable binding, no destructuring, not an error! ???
4-1/5-2:
((foo . bar) (iota 2)) ==> destructuring
((foo . bar) (iota 2) "hello") ==> foo bound to (0 1) , bar bound to ("hello") ???
These examples are non-intuitive. The 2-1 rule should just go away, in my opinion. The second two can be easily remedied by changing 5-1/5-2 to instead be specializations on 3-1/4-1:
((lambda (<var1> <var2> ...) body) <expr1> <expr2> ...)