##and-let* のそれ、自分はいつもこんなふうに書いてます。
(and-let* ([n (expr)]
[ (even? n) ]) ; 束縛変数が無い場合
..)
#値に#fが使えないのはまあ、generalized booleanをモナドもどきに使う宿命なんで、and-let*に限らない気が。
#(and-let* ((even? n)) ...) の方の問題は未使用のローカル変数を警告する支援があれば気付けそう、と思って確認してみると、(and (let ((even? 42)) (and even?)))と展開されるから気付けないのか……。