[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Is this a bug in while-let or do I missunderstand it?
From: |
Philip Kaludercic |
Subject: |
Re: Is this a bug in while-let or do I missunderstand it? |
Date: |
Fri, 08 Nov 2024 19:23:14 +0000 |
arthur miller <arthur.miller@live.com> writes:
> (progn
> (while-let ((run t))
> (message "Running")
> (setf run nil))
> (message "out of loop"))
>
> It ends in infinite recursion. setf/setq have no effect on the lexical
> variable.
>
> I tooka look, but I don't understand why is it necessary to build while-let
> on
> if-let. This simplified version did it for me:
>
> (defmacro while-let (spec &rest body)
> "Bind variables according to SPEC and conditionally evaluate BODY.
> Evaluate each binding in turn, stopping if a binding value is nil.
> If all bindings are non-nil, eval BODY and repeat.
>
> The variable list SPEC is the same as in `if-let*'."
> (declare (indent 1) (debug if-let))
> (let* ((bindings (if (and (consp spec) (symbolp (car spec)))
> (list spec)
> spec))
> (variables (mapcar #'car bindings)))
> `(let* ,bindings
> (while (and ,@variables)
> ,@body))))
With `if-let*' or `while-let' you want to have a sequence of
computations that are evaluated in order (either once for `if-let*' or
for every iteration in the case of `while-let'), until at least one
evaluates to nil. All subsequent bindings shouldn't be evaluated, as
would be the case with your version of the macro.
> (progn
> (while-let ((run t))
> (message "Running")
> (setf run nil))
> (message "out of loop")) => "out of loop"
>
> Or did I missunderstood how to use while-let in subr.el?
--
Philip Kaludercic on siskin
- Is this a bug in while-let or do I missunderstand it?, arthur miller, 2024/11/08
- Re: Is this a bug in while-let or do I missunderstand it?,
Philip Kaludercic <=
- Re: Is this a bug in while-let or do I missunderstand it?, Yuri Khan, 2024/11/09
- Sv: Is this a bug in while-let or do I missunderstand it?, arthur miller, 2024/11/09
- Re: Is this a bug in while-let or do I missunderstand it?, Yuri Khan, 2024/11/09
- Sv: Is this a bug in while-let or do I missunderstand it?, arthur miller, 2024/11/09
- Re: Is this a bug in while-let or do I missunderstand it?, Yuri Khan, 2024/11/09
- Sv: Is this a bug in while-let or do I missunderstand it?, arthur miller, 2024/11/09
- Re: Is this a bug in while-let or do I missunderstand it?, Yuri Khan, 2024/11/09
- Sv: Is this a bug in while-let or do I missunderstand it?, arthur miller, 2024/11/09
- Re: Is this a bug in while-let or do I missunderstand it?, Alfred M. Szmidt, 2024/11/09