Hi,
I've been thinking about this way of removing the ambiguity of contradicting defaults for always/never and thereis.
CLtL2's loop thereis does not mention a default. ANSI-CL does. My reading of CLtL2 is compatible with an implementation of thereis as `when expr return it' -- no default value is supplied. Maybe CLtL2 didn't mention it because the default return of loop is NIL anyway, but who knows?
Now, I propose to implement thereis in Iterate exactly like this.
Benefit: o Some meaning associated to a form previously rejected as ambiguous (always/never with thereis). empty iterations with always+thereis would yield T. o thereis can be used with any other clause, including collect, always etc.
Drawback: o Some meaning associated to a form previously rejected as ambiguous :) and which formally, still is ambiguous. This is precisely why e.g. Bruno Haible rejected a change to CLISP's loop -- which also rejects always+thereis as erroneous -- that I suggested some month ago.
Indeed, the form is still ambiguous from a mathematical POV. ALWAYS and THEREIS do not really fit together.
Am I sacrificing too much for too little gain?
E.g., my proposed thereis could be rewritten as a macro: `(let ((,var ,expr)) (if ,var (leave ,var))) so, when that's needed, the user could do it themselves.
Regards, Jorg
Regards, Jorg Hohle.